Ho una chiave privata in formato PEM generata da OpenSSL FIPS Object Module v1.2 utilizzando uno strumento proprietario di terze parti (che non posso evitare di utilizzare). Questo strumento di terze parti ha crittografato la chiave privata con una passphrase che mi fornisce in formato base64. Ad esempio, ho generato un certificato fittizio e mi dice che la passphrase è CPV6TJwm5cMd1WeVupo2Lg==
.
Il mio obiettivo è utilizzare questa chiave privata in uno script che si connette a un server HTTPS e presenta un certificato client per l'autenticazione. Pertanto, ho bisogno di rimuovere la passphrase dalla chiave. Ho provato una varietà di cose, ma non riesco a decifrare questa chiave privata. Ecco due tentativi che non funzionano:
/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:
Ho trovato su una message board che questo programma di terze parti non utilizza il normale OpenSSL; utilizza OpenSSL FIPS Object Module v1.2, che è un software separato ma correlato che è stato sottoposto a test e certificazione federali statunitensi. Così sono tornato al server che ha generato questa chiave e ho eseguito openssl rsa -in foo.pem -out bar.pem
e ha chiesto la passphrase, ho incollato la passphrase di base64 e ha funzionato!
In base alla Guida per l'utente del Modulo oggetti FIPS OpenSSL v1.2 :
The FIPS Object Module provides an API for invocation of FIPS approved cryptographic functions from calling applications, and is designed for use in conjunction with standard OpenSSL 0.9.8 distributions beginning with 0.9.8j. Note: OpenSSL 1.0.0 is not supported for use with the OpenSSL FIPS Object Module. These standard OpenSSL 0.9.8 source distributions support the original non-FIPS API as well as a FIPS mode in which the FIPS approved algorithms are implemented by the FIPS Object Module and non-FIPS approved algorithms other than DH are disabled by default. These non-validated algorithms include, but are not limited to, Blowfish, CAST, IDEA, RC-family, and non-SHA message digest and other algorithms.
Questo mi indica che non dovrebbe esserci alcun problema per una versione che decodifica le chiavi che sono state crittografate dall'altra versione. Ma la mia esperienza indica il contrario. Mi manca qualcosa?