Compatibilità tra OpenSSL 0.9.8r e OpenSSL FIPS Object Module v1.2?

4

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?

    
posta Mark E. Haase 01.11.2012 - 18:21
fonte

1 risposta

1

Innanzitutto puoi verificare che nel file PEM iniziale contenga la chiave privata RSA reale. Se metti in cat i contenuti del file dovrebbe dire qualcosa del tipo:

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

Ho il strong sospetto che il file che pensi sia la chiave privata non contenga effettivamente una chiave privata.

A seconda di come il sistema originale stava usando il certificato, potrebbero essere un file p12 (certificato + catena e chiave privata) da cui è possibile estrarre la chiave. Ma se questo è stato preso da un sistema che esegue Apache, Admins e Devs amano dare alla chiave un'estensione .key e questa sarebbe solo la vera chiave RSA non una p12.

Come nota a margine ho anche il sospetto che la passphrase della chiave non sia la versione codificata Base64 ma una vera stringa decodificata che in questo caso è

zL&g6.

Se trovi un file .key, non devi fare nulla. Dovresti essere in grado di emettere il comando ss openssl s_client e fare una connessione di test al server usando l'autenticazione client, ad es.

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

Se hai bisogno di estrarre la chiave privata da un p12, fai riferimento a questo per ulteriore aiuto: link

    
risposta data 01.10.2013 - 20:37
fonte

Leggi altre domande sui tag