14 votes

Signer numériquement un document PDF dans iOS

Récemment, on m'a confié un projet iOS dans lequel je dois signer numériquement un document pdf à l'aide d'une clé que l'application téléchargera depuis un serveur.

Je n'ai pas encore une idée claire du processus de signature des documents, ce que je sais jusqu'à présent, c'est que je signerai mon pdf à l'aide d'un fichier à clé privée qui m'a été fourni, puis la vérification sera effectuée à l'aide de la version à clé publique du même fichier.

J'ai vu que la signalisation numérique peut être réalisée en utilisant des bibliothèques comme iText pour Java ou iTextSharp pour C#. C'est pourquoi j'aimerais savoir s'il existe quelque chose de similaire pour iOS ? Et si ce n'est pas le cas, quel serait le processus pour y parvenir en utilisant les capacités de Quartz à gérer les documents pdf ?


Eh bien... J'ai vérifié la documentation d'Apple, et j'ai trouvé ceci :

https://developer.apple.com/documentation/security/certificate_key_and_trust_services

Je pense qu'il est censé supporter le format X.509... que je pourrais utiliser pour signer le pdf en tant qu'instance de CFData, je suppose. J'ai également vérifié l'exemple de code CryptoExercise, mais je ne suis pas sûr à 100% que ce soit ce que je recherche.

D'autres suggestions m'ont dit de vérifier la documentation d'Adobe, mais je n'ai pas encore trouvé d'api en C pour signer des documents à l'aide de certificats.

Si quelqu'un a utilisé les services de certificats fournis par Apple... toute suggestion ou plus d'exemples de codes pour comprendre le processus serait la bienvenue.

10voto

Jimmy Koerting Points 521

Pablo,

La signature de documents PDF est une tâche difficile (ma société le fait dans le monde Windows en Pascal).

En général, je peux vous dire que vous ne trouverez probablement pas de code source utilisable que vous pourrez simplement incorporer dans votre projet. Pour voir comment c'est fait, le code source d'iText est un bon point de départ, car tout y est.

En objectif-c vous êtes sur la bonne voie. L'utilisation de certificats X.509 avec des fonctions comme SecKeyRawSign est la bonne méthode (parce que les paddings actuels sont trop vieux, vous devez créer votre propre padding pour supporter, par exemple, SHA256. Vous pouvez voir ici, comment cela est fait : Quelle est la différence entre les différents types de rembourrage sur iOS ? ). Les "dataToSign" ne sont rien d'autre que le hachage du contenu du PDF (par exemple SHA256) que vous souhaitez signer.

Pour savoir quelle partie de la source PDF vous devez signer exactement, vous devez consulter la documentation adobe PDF 1.6, ou faire des recherches dans les groupes qui en parlent. La langue dans laquelle vous allez signer le PDF ne fait aucune différence.

Au final, vous intégrerez la signature et certaines informations sur la signature dans la partie prédéfinie du document PDF (attention à ne pas casser le hachage valide en faisant cela ;) ) et elle pourra être vue et vérifiée avec tout autre logiciel de signature/vérification de PDF.

Je suis désolé de ne pas pouvoir vous fournir de code pertinent, mais vous trouverez suffisamment d'exemples autour des certificats X.509 - par exemple, la création d'une connexion SSL/SSH. Et si vous cherchez SecKeyRawSign, vous trouverez même des exemples de signature (au moins avec d'autres modèles). C'est tout ce dont vous avez besoin, si vous trouvez la syntaxe PDF pour prendre la partie du contenu à signer et pour intégrer la signature dans le PDF final.

J'espère que cela vous a aidé

Jimmy

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X