2013-08-21 3 views
1

Comment signer des fichiers sur la ligne de commande en utilisant une identité de confiance?Comment signer des fichiers en toute confiance avec OpenSSL

Pour les courriels, vous obtenez un certificat x509, signé par une autorité de certification - pouvez-vous utiliser le même pour signer des fichiers?

Ou l'autorité de certification doit-elle signer votre clé publique et vous utiliserez la clé privée correspondante pour signer le fichier?

En ce moment, je viens de trouver un moyen de sign files with the private key, mais pas un moyen d'avoir la clé publique signée par une autorité de certification, ni un moyen de signer des fichiers en utilisant le cert.

+0

Vous ne signez pas les fichiers avec un certificat. Seulement avec la clé privée. – gtrig

Répondre

0

En fait, le certificat x509 est la clé publique signée!

Ce sont les destinataires qui doivent utiliser le certificat pour vérifier votre identité et la clé publique pour vérifier la signature.

Ce qu'ils doivent faire est extraire la clé publique du certificat à l'utiliser pour vérifier:

openssl x509 -in me.crt -pubkey -noout > me.pub 
+0

Oui, le certificat X509 est une structure signée qui contient une clé publique, des informations d'identité associées à cette clé et des extensions qui indiquent à quoi la clé peut et ne peut pas être utilisée. Vous avez mentionné dans vos commentaires d'édition que vous savez que vous ne pouvez pas signer avec une clé publique, mais votre réponse ci-dessus indique que c'est ce que vous essayez de faire. Vous ne devez pas signer avec un certificat ou une clé publique extraite d'un certificat. Vous devez vous connecter avec une clé privée et le vérifier avec la clé publique ou le certificat. – gtrig

+0

Merci, je n'étais pas assez focalisé et j'ai encore écrit une signature /: Dans mon cas, j'avais besoin d'extraire la clé privée d'un fichier pkcs12, ce qui m'a un peu dérouté. – Andy

+0

OK. J'ai enlevé mon downvote. Vous devriez aussi changer «signe» pour «vérifier» dans votre question originale. – gtrig

1

La clé publique (contenue dans le certificat) est utilisée à des fins de vérification. La clé privée de la clé publique est utilisée pour signer les données.

Votre clé publique est signée par CA. Vous pouvez utiliser votre clé privée correspondante pour cette clé publique pour signer un fichier. Le vérificateur utilisera la clé publique pour vérifier la signature du fichier.

Le certificat est une clé publique signée par une autorité de certification. Si l'autorité de certification est approuvée, le certificat sera approuvé. Comme vous utilisez un certificat pour signer un fichier, son objectif doit également être mentionné dans le certificat. Donc, assurez-vous que CA permet de signer le fichier en spécifiant ce champ dans le but du certificat.

+0

'' 'openssl rsautl -verify -inkey me.csr''' le ferait, alors? – Andy

+0

Et quel champ est le champ de but? _X509v3 Utilisation de la clé_? – Andy

+0

et quelle valeur aurait-il exactement besoin? – Andy

2

Vous ne voulez jamais signer avec une clé publique, car cette signature est alors vide de sens. Beaucoup de gens ont une clé publique. Une seule personne (le signataire) devrait avoir une clé privée. Si vous avez signé avec une clé publique, toute personne ayant cette clé publique peut également créer une signature qui est tout aussi valide. Il n'y aurait aucun moyen de déterminer qui l'a effectivement signé, ce qui va à l'encontre du but des signatures. En outre, il n'y aurait aucun moyen de vérifier une signature signée avec une clé publique car personne n'aurait la clé privée.

Vous signez toujours avec une clé privée et vérifiez avec une clé publique.

Votre signature peut être accompagnée d'un certificat X509. Si le certificat est signé par une entité de confiance, alors quiconque possède ce certificat et lui fait confiance, peut également approuver la signature qui a été générée par la clé privée correspondant à la clé publique figurant dans le certificat.

Le lien que vous avez donné dans votre question contient les commandes openssl pour vérifier une signature. En plus des méthodes openssl dgst et openssl rsautl pour vérifier une signature, vous pouvez également utiliser openssl pkeyutl.

openssl pkeyutl -verify -in data -sigfile signature.bin -pubin -inkey pubkey.pem 
Questions connexes