web-dev-qa-db-fra.com

Une manière standard d'ajouter manuellement une signature numérique à un fichier pdf?

J'ai créé quelques certificats à utiliser moi-même, mais je me retrouve perplexe lorsqu'il s'agit de créer un certificat contenant une signature numérique. Tout d'abord, comment pourrais-je créer un certificat standard qui ne contient plus uniquement des champs communs, mais également des champs contenant une signature numérique. Et deuxièmement, comment puis-je ajouter manuellement ce certificat en tant que données au fichier pdf correspondant?

Merci!

15
roman canada

Selon vos commentaires à d'autres réponses, vous voulez réellement

signez un fichier pdf avec [votre] certificat, puis enregistrez cette signature et joignez-la au pdf que vous venez de signer.

(BTW, vous vous connectez avec la clé privée associée à la clé publique dans votre certificat, pas avec le certificat lui-même, mais c'est un détail.)

Je suppose que vous voulez "ajouter" la signature au PDF d'une manière qu'une visionneuse conforme PDF standard (par exemple Adobe Reader) reconnaîtra , afficher et valider en tant que signature PDF intégrée.

Dans ce cas, vous avez déjà mal commencé en signant le PDF original tel quel et en vous attendant à devoir simplement ajouter cette signature au fichier. À la place, vous devez créer une nouvelle révision du document PDF qui comprend un champ de signature PDF AcroForm dont la valeur est un dictionnaire de signature dont /Contents l'entrée contient la signature de toute la nouvelle révision à l'exception du contenu de l'entrée /Contents .

Signature embedded in PDF

Si plusieurs signatures doivent être intégrées dans un PDF, cela se fait au moyen de mises à jour PDF incrémentielles (explicitement pas ) en ajoutant plusieurs SignerInfo se structure en un seul conteneur de signature CMS intégré!):

Multiple signatures and incremental updates

Ceci est expliqué assez graphiquement et plus en détail dans le document Adobe Signatures numériques dans un PDF . Il est en outre spécifié dans la spécification PDF ISO 32000-1: 2008 mise à disposition ici par Adobe dans la section 12.8 Signatures numériques.

Soyez conscient, cependant! La spécification dit:

Un résumé de plage d'octets doit être calculé sur une plage d'octets dans le fichier, qui doit être indiquée par l'entrée ByteRange dans le dictionnaire de signature. Cette plage doit être l'ensemble du fichier, y compris le dictionnaire de signature mais à l'exclusion de la valeur de signature elle-même (l'entrée Contenu). D'autres plages peuvent être utilisées, mais comme elles ne vérifient pas toutes les modifications apportées au document, leur utilisation n'est pas recommandée.

Cela semble vous permettre de créer d'abord une signature pour le PDF d'origine, puis d'ajouter une nouvelle révision contenant cette signature indiquant que la plage d'octets signés ne contient que cette révision d'origine, pas la révision étendue sans seulement la signature.

En réalité, cependant, les téléspectateurs PDF (en particulier Adobe Reader) n'accepteront que les signatures qui suivent la recommandation selon laquelle la plage signée doit être le fichier entier, y compris le dictionnaire de signature mais à l'exclusion de la valeur de signature elle-même .

Spécifications plus récentes, par ex. la spécification ETSI PAdES ETSI TS 102 778 (cf. section 5.1, élément b, partie 2 et section 4.2, élément c, partie ), font même officiellement de cette recommandation une exigence, et ISO 32000-2 aussi.

Selon votre contexte de programmation, il existe de nombreuses bibliothèques PDF prenant en charge la création de signatures PDF intégrées ainsi que de nombreux produits utilisant ces bibliothèques. Certains d'entre eux sont même disponibles pour un sujet gratuit, par exemple à l'AGPL.

24
mkl

Le certificat vous étant enregistré et les champs remplis avec vos coordonnées, le certificat est votre signature numérique. Vous n'ajoutez pas de signature numérique au certificat.

Vous avez besoin d'un certificat émis par une autorité de certification (que vous pouvez créer). Ajoutez ensuite le certificat à vos certificats de confiance (s'ils sont auto-signés ou non d'une autorité de certification reconnue standard). Lorsque vous créez des fichiers PDF, vous avez la possibilité de signer le fichier avec ce certificat. Cette signature de certificat est votre signature numérique ...

Il y a un HowTo décent ici qui date de 2009 mais qui est toujours valide: http://blog.didierstevens.com/2009/01/04/howto-add-a-digital-signature-to-a-pdf- fichier /

1
AndyMac

Un certificat contient toujours une signature, mais sur lui-même, pas sur un document PDF. Cette signature fait partie intégrante du certificat et a été calculée par l'AC qui a délivré le certificat; c'est en vérifiant cette signature que tout logiciel peut gagner une certaine confiance dans le contenu du certificat. Tout cela se produit indépendamment de tout fichier PDF, et peut vieillir avant que le fichier PDF existe.

Lorsque vous signez un document "avec un certificat", vous calculez en fait une signature sur le PDF avec votre clé privée - la clé privée n'est pas dans votre certificat, mais le certificat contient la clé publique correspondante . Ensuite, la signature elle-même et une copie de votre certificat doivent être incluses dans le fichier PDF.

documents Adobe que les signatures peuvent être calculées avec leurs produits Reader et Acrobat. Cela peut apparemment être fait avec un logiciel gratuit aussi.

1
Tom Leek

Votre question est vraiment deux questions différentes. Un certificat ne doit être signé par un autre certificat que s'il doit exister une chaîne de confiance. Par exemple, une autorité de certification racine signera les certificats qu'elle émet afin que quiconque essaie de vérifier le certificat sache qu'il est approuvé par l'autorité de certification. Vous pouvez effectuer ce type de chaînage avec n'importe quel certificat autorisant la signature de certificat.

En revanche, pour les documents, vous n'avez besoin que d'un certificat approuvé pour l'authentification client. Si vous exécutez votre propre autorité de certification, votre certificat est probablement approuvé pour n'importe quel but, mais il manquera de confiance par quelqu'un d'autre que vous. Pour signer un PDF, il vous suffit d'importer le certificat dans Acrobat, puis d'utiliser l'identité pour signer le document.

1
AJ Henderson

Si vous souhaitez signer un PDF, la plupart des rédacteurs PDF et certaines versions du lecteur uniquement auront un mécanisme intégré pour la signature, et certains même pour l'horodatage. Il vous demandera de fournir votre fichier de certificat, puis il appliquera la signature numérique dans le fichier. Les PDF en particulier ont ce mécanisme intégré dans le format, mais il est également possible de signer n'importe quel type de fichier. Une chose qu'il est important de noter pour les nouveaux utilisateurs de la signature PDF est que vous pouvez signer une PDF sans marquage visible sur la page. La signature est en fait des métadonnées et tout type de marquage sur la page est facultatif.

Adobe fournit un tutoriel vidéo sur la façon de signer un PDF . Vous pouvez également lire plus de documentation sur le site Adobe.

Vous pouvez également faire la signature numérique de fichiers avec des outils de ligne de commande, mais si vous êtes nouveau dans le processus, un programme comme PortableSigner ou peut-être j4sign pourrait bien fonctionner pour vous. Vous pouvez parcourir SourceForge et Github pour rechercher d'autres projets applicables pouvant répondre à vos besoins.

1
Eric G