Existe-t-il un moyen de signer numériquement un certificat x509 ou tout autre document en utilisant openssl?
Oui, les composants dgst et rsautl d'OpenSSL peuvent être utilisés pour calculer une signature à partir d'une paire de clés RSA.
openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature
openssl rsautl -verify -inkey publickey.pem -pubin -keyform PEM -in signature
Mise à jour: capturer les commentaires de Reto ci-dessous car c'est une nuance importante. Vraisemblablement, si vous avez du mal à vérifier, vous voulez savoir que la signature a été produite sur le texte en clair auquel elle est attachée:
Cela peut sembler évident pour certains, mais: soyez conscient, rsault verify
décrypte simplement le fichier signature
. La sortie de cet appel est garantie d'être produite par le propriétaire de la clé privée, mais à côté de cela, rien d'autre n'est vérifié. Donc, pour vérifier la cohérence de data.txt
vous devez régénérer le résumé, puis le comparer à la sortie de openssl rsautl -verify
.
data.txt
:openssl dgst -sha256 -verify publickey.pem -signature signature data.txt
Pour cette opération, openssl requiert la clé publique, la signature et le message.
Autre moyen de signer/vérifier un single, inspiré par réponse d'Anders Lindahl .
à signer
openssl dgst -sha256 -sign snakeoil.key -out some-file.sha256 some-file
pour vérifier
# dgst -verify requires the public key
openssl x509 -in snakeoil.crt -pubkey -noout > snakeoil.pub
openssl dgst -sha256 -verify snakeoil.pub -signature some-file.sha256 some-file
# in case of success: prints "Verified OK"
# in case of failure: prints "Verification Failure", return code 1
# or compact (requires a modern Shell)
openssl dgst -sha256 \
-verify <(openssl x509 -in snakeoil.crt -pubkey -noout) \
-signature some-file.sha256 some-file
Pour signer numériquement document dans openssl cela fonctionnera
Pour cette première, votre certificat devrait être approuvé, il ressemblerait à ceci
-----BEGIN TRUSTED CERTIFICATE-----
MIIDbjCCAlYCCQCOyunl25ProDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJJ
...
-----END TRUSTED CERTIFICATE-----
Utilisez ensuite la commande suivante
smime -sign -signer certificate.pem -inkey private.key -in test.txt \
-out test1.txt -from ashish -to singhal