2012-10-08 18 views
15

Ho un certificato C.pfx che mi è stato dato per funzionare con OpenSSL. Il certificato C.pfx ha il seguente percorso di certificazione: C-> B-> AOpenSSL: impossibile ottenere il certificato emittente locale

Ho convertito C.pfx in PEM utilizzando il seguente comando: openssl pkcs12 -in C.pfx -out C.pem -nodes - - FUNZIONA OK

Ho aperto il certificato C.pem nell'editor di file e vedo che ha entrambe le parti RSA PRIVATE KEY e CERTIFICATE.

Vedo anche i certificati A e B installati nell'archivio Athorities di Trusted Roor Certification in Windows XP.

L'obiettivo è quello di firmare, cifrare, decifrare e verificare un file di prova utilizzando OpenSSL per Windows versione 1.0.1c (è attualmente l'ultima versione)

Io uso i seguenti comandi:

--to SIGN--

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

--to ENCRYPT--

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

--to DECRYPT -

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

--to VERIFY--

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

ho usato console MMC per esportare B e certificati per Cer file e poi convertito alla PEM utilizzando OpenSSL. Dopo di che ho provato i seguenti 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 

Tutti e 3 i tentativi di verifica fallita con il seguente errore:

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 

Che cosa sto facendo di sbagliato?

risposta

18

Quando si utilizza openssl smime verify openssl tenta di verificare che il certificato da utilizzare sia considerato verificandone la firma (vale a dire la firma nel certificato, non la firma nel messaggio firmato che si è richiesto di verificare). Per fare ciò deve avere una copia del certificato per la chiave della CA che ha emesso il certificato.

Il parametro -CAfile viene utilizzato per passare il nome del file contenente tale certificato CA, NON il certificato della chiave utilizzata per firmare il messaggio. Dovresti specificare il certificato della chiave utilizzata per firmare il messaggio con un parametro -certfile ... ma nel tuo caso il certificato sarà nel file test.tmp (puoi sopprimerlo specificando -nocerts quando firmi il messaggio).

Per sopprimere il controllo del certificato chiave durante la verifica di un messaggio è possibile fornire il comando -noverify al comando di verifica (sebbene openssl smime verify -noverify abbia un aspetto un po 'strano).

+0

+1 per 'openssl smime -verify -noverify' proprio quello di cui avevo bisogno! – PassKit

+2

@PassKit Anche se il comando sembra molto contraddittorio. –

Problemi correlati