web-dev-qa-db-fra.com

Signature numérique d'un fichier à l'aide d'OpenSL

Existe-t-il un moyen de signer numériquement un certificat x509 ou tout autre document en utilisant openssl?

38
Ajay kumar

Oui, les composants dgst et rsautl d'OpenSSL peuvent être utilisés pour calculer une signature à partir d'une paire de clés RSA.

Signature:

openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature

Vérification de la signature uniquement:

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.

Vérification que le propriétaire de la clé privée se porte garant de 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.

43
Anders Lindahl

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
55
reto

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
5
Ashish Singhal