La signature de documents en ligne de commande avec OpenSSL
Par fpl le vendredi 29 décembre 2006, 16:37 - Général - Lien permanent

Pour bien finir l'année, voici un petit tutorial pour réaliser simplement une signature électronique sur un document quelconque en ligne de commande avec OpenSSL.
Pour commencer, il est nécessaire de disposer :
- d'un certificat de signature délivré par une autorité de certification. Veuillez noter que la procédure proposée ici ne fonctionne pas avec un certificat X.509 autosigné
- de la clé privée associée à ce certificat (et éventuellement du passphrase de chiffrement de la clé);
- de la chaîne de certification du certificat de signature.
Ce tutorial permet d'utiliser un container cryptographique standardisé PKCS7 qui embarquera les données signées, la signature et les informations du signataire.
Signer
openssl smime -sign \
-in fichier_à_signer \
-outform pem -out fichier_sortie_pkcs7 \
-nodetach \
-signer certificat_signataire \
-inkey cle_privée_signataire \
-certfile chaîne_de_certification_signataire
Vérifier
openssl smime -verify \
-in fichier_signé_pkcs7 -inform pem \
-out fichier_de_donnees \
-CAfile chaine_de_certification \
-certfile certificat_du_signature
Si la vérification échoue, la commande revoie un code retour (>0). Si la commande réussie (code retour=0), le fichier de donnée contient les données signées.
Il est possible également avec la commande smime de openssl de chiffrer/déchiffrer ou d'utiliser des formats d'échange de type S/MIME plutôt que PKCS7. Pour cela, RTFM.




Commentaires
J'ai rencontré quelques soucis lors de la signature de fichiers textes en mode "détachée". En effet, si le fichier texte est modifié (par exemple lors d'un transfert FTP en mode ASCII) après la signature, c'est une erreur à tous les coup lors de la vérification.
Il est possible d'utiliser l'option -binary lors de la signature mais la solution la plus reste encore de travailler sur une signature embarquée.