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?