Solución:
Forma alternativa de firmar / verificar un sencillo, inspirada en la respuesta de Anders Lindahl.
para firmar
openssl dgst -sha256 -sign snakeoil.key -out some-file.sha256 some-file
para verificar
# 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
Sí, los componentes dgst y rsautl de OpenSSL se pueden utilizar para calcular una firma dado un par de claves RSA.
Firma:
openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature
Verificando solo la firma:
openssl rsautl -verify -inkey publickey.pem -pubin -keyform PEM -in signature
Actualización: capturando los comentarios de Reto desde abajo porque este es un matiz importante. Presumiblemente, si se va a tomar la molestia de verificar, desea saber que la firma se produjo en el texto sin formato al que se adjunta:
Esto puede parecer obvio para algunos, pero: tenga en cuenta, rsautl verify
simplemente descifra el archivo signature
. Se garantiza que la salida de esta llamada será producida por el propietario de la clave privada, pero además de eso, no se verifica nada más. Entonces, para verificar realmente la consistencia de data.txt
tienes que regenerar el resumen y luego compararlo con la salida de openssl rsautl -verify
.
Verificar que el propietario de la clave privada responda data.txt
:
openssl dgst -sha256 -verify publickey.pem -signature signature data.txt
Para esta operación, openssl requiere la clave pública, la firma y el mensaje.
Para firmar digitalmente documento en openssl funcionará
Para esto, primero debe confiar en su certificado, se vería así
-----BEGIN TRUSTED CERTIFICATE-----
MIIDbjCCAlYCCQCOyunl25ProDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJJ
...
-----END TRUSTED CERTIFICATE-----
Luego usa el siguiente comando
smime -sign -signer certificate.pem -inkey private.key -in test.txt
-out test1.txt -from ashish -to singhal