2012-10-08 22 views
15

Tengo un certificado C.pfx que me fue otorgado para trabajar con OpenSSL. El certificado C.pfx tiene la siguiente ruta de certificación: C-> B-> AOpenSSL: no se puede obtener el certificado de emisor local

Convertí C.pfx en PEM usando el siguiente comando: openssl pkcs12 -en C.pfx -out C.pem -nodos - - OBRAS OK

Abrí el certificado C.pem en el editor de archivos y veo que tiene ambas partes RSA PRIVATE KEY y CERTIFICATE.

También veo los certificados A y B instalados en la tienda Athorities de Trusted Roor Certification en Windows XP.

El objetivo es firmar, cifrar, descifrar y verificar un archivo de prueba usando OpenSSL para Windows versión 1.0.1c (que es actualmente la última versión)

utilizo los siguientes comandos:

--a SIGN--

openssl smime -sign -signer C.pem -in test.txt -out test.tmp -- WORKS OK 

--a ENCRYPT--

openssl smime -encrypt -in test.tmp -out test.enc C.pem  -- WORKS OK 

--a DECRYPT -

openssl smime -decrypt -in test.enc -recip C.pem -inkey C.pem -out test1.tmp -- WORKS OK 

--a VERIFY--

openssl smime -verify -in test1.tmp -CAfile "C.pem" -out notes1.txt -- FAILS 

que utiliza la consola MMC para exportar B y A certificados por CER archivos y luego los convierte a PEM usando OpenSSL. Después de eso probé las siguientes 2:

openssl smime -verify -in test1.tmp -CAfile "A.pem" -out notes1.txt -- FAILS 

openssl smime -verify -in test1.tmp -CAfile "B.pem" -out notes1.txt -- FAILS 

los 3 intentos para verificar fallado con el error siguiente:

Verification failure 
3672:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:.\crypt 
o\pkcs7\pk7_smime.c:342:Verify error:unable to get local issuer certificate 

¿Qué estoy haciendo mal?

Respuesta

18

Cuando usa openssl smime verify openssl intenta verificar que el certificado que va a usar es confiable comprobando su firma (esa es la firma en el certificado, no la firma en el mensaje firmado que solicitó verificar). Para hacerlo, debe tener una copia del certificado de la clave de la CA que emitió el certificado.

El parámetro -CAfile se utiliza para pasar el nombre del archivo que contiene ese certificado CA, NO el certificado de la clave utilizada para firmar el mensaje. Debería especificar el certificado de la clave utilizada para firmar el mensaje con un parámetro -certfile ... pero en su caso el certificado estará en el archivo test.tmp (puede suprimir eso especificando -nocerts cuando firme el mensaje).

Para suprimir la comprobación del certificado de clave al verificar un mensaje, puede proporcionar el parámetro -noverify al comando verify (aunque openssl smime verify -noverify se ve un poco raro).

+0

+1 para 'openssl smime -verify -noverify' ¡justo lo que necesitaba! – PassKit

+2

@PassKit Aunque el comando parece muy contradictorio. –

Cuestiones relacionadas