Hay una manera para firmar digitalmente un certificado x509 o cualquier documento usando openssl?

InformationsquelleAutor Ajay kumar | 2012-05-28

3 Comentarios

  1. 42

    Sí, la dgst y rsautl componente de OpenSSL puede ser usada 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
    

    Verificar solo la firma:

    openssl rsautl -verify -inkey publickey.pem -pubin -keyform PEM -in signature
    

    Actualización: la Captura de Reto los comentarios de abajo, porque este es un matiz importante. Presumiblemente, si van a la molestia de verificar, desea conocer la firma se produjo en el texto al que se adjunta:

    Esto puede parecer obvio para algunos, pero: Ser consciente, rsault verify sólo descifra el archivo signature. El resultado de esta convocatoria se garantiza que sea producido por el propietario de la clave privada, pero además de que nada más se está activada. Para realmente comprobar la coherencia de data.txt tiene que volver a generar el resumen y luego se compara con la salida de openssl rsautl -verify.

    La verificación de que el propietario de la clave privada no responder por data.txt:

    openssl dgst -sha256 -verify publickey.pem -signature signature data.txt
    

    Para esta operación, openssl requiere de la clave pública, la firma y el mensaje.

    • Esto dejará un hex/ascii forma de hash en el archivo «hash», si quería una versión binaria de la hash para ser firmado, usted necesita para usar «binario» en el openssl dgst de la línea de comandos.
    • Mi versión de openssl también se requiere -pubin para verificar el trabajo.
    • Esto puede parecer obvio para algunos, pero: Ser consciente, rsault verify sólo descifra el archivo signature. El resultado de esta convocatoria se garantiza que sea producido por el propietario de la clave privada, pero además de que nada más se está activada. Para realmente comprobar la coherencia de data.txt tiene que volver a generar el resumen y, a continuación, compare contra el ouptut de openssl rsautl -verify.
    • Cuando las herramientas de seguridad que dar un sintácticamente respuesta correcta, mientras que hacer algo contra-intuitivo que tiende a conducir a sistemas que fallan en silencio y malos resultados. Pensé que el comentario de @reto se necesita más visibilidad así que he copiado a la respuesta.
    • gracias @T. Rob recomiendo solo usar mi solución e ignorar esta respuesta completamente 🙂 !
    • Por desgracia, un artefacto de Desbordamiento de Pila que hace que algo raro sucede. Dado que esta respuesta es la aceptación de uno, se va a seguir para ser más visible que la tuya. Yo lo hice al menos el voto de la tuya.
    • cuando me pase la clavepublica.pem-verificar opción me sale un error que dice unable to load private key, EXPECTING ANY PRIVATE KEY. Después de pasar la clave privada de nuevo en la opción de comprobar puedo obtener el valor de hash sha256 de vuelta que he firmado con la clave privada. Después de obtener el valor de hash sha256 necesito volver a calcular el hash de orignal de texto y comparar con sha256 salida de hash de la opción de comprobar.
    • Sí tienes razón. La solución simple es usar openssl dgst para hacer la verificación. Por supuesto, esto requiere que el formato de sólo texto para hacer su trabajo. openssl dgst -sha256 -verify publickey.pem -signature signature data.txt
    • Hola, acabo de probar con la misma forma. Yo uso «openssl rsautl -verificar -inkey clavepublica.pem -pubin -keyform PEM -en la firma» para obtener el valor de hash, y es el mismo que el de mi archivo hash. Pero yo uso «openssl dgst -sha256 -verificar clavepublica.pem -firma firma data.txt», muestra de Error de Verificación. ¿Por qué sucedió eso?

  2. 55

    Forma alternativa de firmar/verificar una sola, inspirado por Anders Lindahl respuesta.

    a 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
    
    • Esto ayudó a – tuve el archivo crt, pero no sabía cómo ir sobre la comprobación sin el .archivo pub. Ahora sé 😉
    • Para aclarar, some-file.sha256 es en realidad la firma (por ejemplo, signature.txt), y some-file es en realidad el mensaje firmado (por ejemplo, message.txt). Así, en ambas operaciones, some-file es un archivo de entrada. En el -sign operación, signature.txt es un archivo de salida, y en el -verify operación, signature.txt es un archivo de entrada. Me gustaría editarlo, pero voy a dejar de hacerlo si lo desea.
    • Es some-file.sha256 es un archivo binario? es esto normal? Ya que después de hacer así que me puse un contenido de un archivo que se parece a esto @ugڻ��^{�{�9T�*�xAO"kd{�����d������͊��(����k�,A'c;�&�g��[b��e�i:��hh0���^���:�[email protected]��e�$��A������-�?�'� Después de ejecutar el comando: openssl dgst -sha256 -sign snakeoil.key -out some-file.sha256 some-file
    • Es normal y esperado.
  3. 5

    A firmar digitalmente documento en openssl va a trabajar

    Para esta primera su certificado de confianza
    sería este aspecto

    -----BEGIN TRUSTED CERTIFICATE-----
    MIIDbjCCAlYCCQCOyunl25ProDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJJ
    ...
    -----END TRUSTED CERTIFICATE-----
    

    A continuación, utilice el siguiente comando

    smime -sign -signer certificate.pem -inkey private.key -in test.txt \
        -out test1.txt -from ashish -to singhal
    

Dejar respuesta

Please enter your comment!
Please enter your name here