¿Compatibilidad entre OpenSSL 0.9.8r y OpenSSL FIPS Object Module v1.2?

4

Tengo una clave privada en formato PEM que fue generada por OpenSSL FIPS Object Module v1.2 usando una herramienta de terceros propietaria (que no puedo evitar usar). Esta herramienta de terceros cifró la clave privada con una frase de contraseña que me proporcionó en formato base64. Por ejemplo, generé un certificado ficticio y me dice que la frase de contraseña es CPV6TJwm5cMd1WeVupo2Lg== .

Mi objetivo es usar esta clave privada en un script que se conecta a un servidor HTTPS y presenta un certificado de cliente para la autenticación. Por lo tanto, necesito eliminar la contraseña de la clave. He intentado una variedad de cosas, pero parece que no puedo descifrar esta clave privada. Aquí hay dos intentos que no funcionan:

/Users/mhaase/Downloads $ openssl rsa -in FoundstoneClientCertificate.pem -out FoundstoneClientCertificate2.pem -passin pass:CPV6TJwm5cMd1WeVupo2Lg==
unable to load Private Key
59915:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/evp/evp_enc.c:330:
59915:error:0906A065:PEM routines:PEM_do_header:bad decrypt:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/pem/pem_lib.c:428:

/Users/mhaase/Downloads $ echo "CPV6TJwm5cMd1WeVupo2Lg==" | openssl base64 -d | openssl rsa -in FoundstoneClientCertificate.pem -out FoundstoneClientCertificate2.pem -passin stdin
unable to load Private Key
59909:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/evp/evp_enc.c:330:
59909:error:0906A065:PEM routines:PEM_do_header:bad decrypt:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/pem/pem_lib.c:428:

Encontré en un panel de mensajes que este programa de terceros no utiliza OpenSSL normal; utiliza OpenSSL FIPS Object Module v1.2, que es un software separado pero relacionado que se ha sometido a pruebas y certificación federales de EE. UU. Así que volví al servidor que generó esta clave y corrí openssl rsa -in foo.pem -out bar.pem y pedí la frase de acceso, pegué la frase de acceso de base64, ¡y funcionó!

De acuerdo con la OpenSSL FIPS Object Module v1.2 Guía del usuario :

  

El Módulo de objetos FIPS proporciona una API para la invocación de funciones criptográficas aprobadas por FIPS desde aplicaciones de llamadas, y está diseñado para usarse junto con las distribuciones estándar OpenSSL 0.9.8 que comienzan con 0.9.8j. Nota: OpenSSL 1.0.0 no es compatible con el módulo de objetos FIPS de OpenSSL. Estas distribuciones de origen estándar de OpenSSL 0.9.8 son compatibles con la API original no FIPS, así como con un modo FIPS en el que el Módulo de objetos FIPS implementa los algoritmos aprobados por FIPS y los algoritmos no aprobados por FIPS que no sean DH están desactivados de manera predeterminada. Estos algoritmos no validados incluyen, pero no se limitan a, resumen de mensajes de Blowfish, CAST, IDEA, RC-family y no SHA y otros algoritmos.

Esto me indica que no debería haber ningún problema para que una versión descifre las claves cifradas por la otra versión. Pero mi experiencia indica lo contrario. ¿Me estoy perdiendo algo?

    
pregunta Mark E. Haase 01.11.2012 - 18:21
fuente

1 respuesta

1

Primero, puede verificar que en el archivo PEM inicial contenga la clave privada RSA real. Si actualizas el contenido del archivo, debería decir algo como esto:

-----BEGIN RSA PRIVATE KEY-----

Sospecho altamente que el archivo que crees que es la clave privada no contiene realmente una clave privada.

Dependiendo de cómo el sistema original estaba usando el certificado, pueden ser un archivo p12 (certificado + cadena y clave privada) en algún lugar del que se pueda extraer la clave. Pero si esto se tomó de un sistema que ejecuta Apache, a los administradores y desarrolladores les gustaría darle a la clave una extensión .key y esta sería la clave RSA real no una p12.

Como nota al margen, también sospecho que la frase de acceso a la clave no es la versión codificada en Base64, sino la cadena descodificada real que en este caso es

  

zL & g6.

Si encuentra un archivo .key, no necesita hacer nada. Debería ser capaz de emitir el comando openssl s_client y hacer una conexión de prueba al servidor usando la autenticación del cliente, por ejemplo.

openssl s_client -connect host:443 -cert cert_and_key.pem -key cert_and_key.pem 

Si necesita extraer la clave privada de una p12, consulte esto para obtener más ayuda: enlace

    
respondido por el Matt S 01.10.2013 - 20:37
fuente

Lea otras preguntas en las etiquetas