2012-10-08 11 views
15

Ich habe ein Zertifikat C.pfx, das mir gegeben wurde, um mit OpenSSL zu arbeiten. Das Zertifikat C.pfx hat den folgenden Zertifizierungspfad: C-> B-> AOpenSSL: lokales Ausstellerzertifikat nicht erhalten

Ich konvertierte C.pfx zu PEM mit dem folgenden Befehl: openssl pkcs12 -in C.pfx -out C.pem -nodes - - WORKS OK

Ich öffnete das Zertifikat C.pem im Dateieditor und sehen, dass es sowohl RSA PRIVATE KEY und ZERTIFIKAT Teile hat.

Ich sehe auch beide A-und B-Zertifikate installiert unter Trusted Roor Certification Athorities speichern in Windows XP.

Ziel ist es, Signieren, Verschlüsseln, Entschlüsseln und eine Testdatei für Windows-Version 1.0.1c (es ist derzeit die neueste Version)

Ich verwende die folgenden Befehle mit OpenSSL überprüfen:

--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 

verwendete ich MMC-Konsole B und A Zertifikate zu exportieren Dateien cer und dann konvertiert sie in das PEM-OpenSSL. Danach habe ich versucht, die folgenden 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 

Alle 3 Versuche mit dem folgenden Fehler fehlgeschlagen zu überprüfen:

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 

Was mache ich falsch?

Antwort

18

Wenn Sie openssl smime verify verwenden, versucht openssl zu verifizieren, dass das zu verwendende Zertifikat vertrauenswürdig ist, indem es seine Signatur überprüft (das ist die Signatur im Zertifikat, nicht die Signatur in der signierten Nachricht, die Sie bestätigen wollten). Dazu muss es eine Kopie des Zertifikats für den Schlüssel der Zertifizierungsstelle haben, die das Zertifikat ausgestellt hat.

Der Parameter -CAfile wird verwendet, um den Namen der Datei zu übergeben, die dieses CA-Zertifikat enthält, NICHT das Zertifikat des Schlüssels, der zum Signieren der Nachricht verwendet wurde. Sie würden das Zertifikat des Schlüssels angeben, der zum Signieren der Nachricht verwendet wird, mit einem -certfile Parameter ... aber in Ihrem Fall befindet sich das Zertifikat in der test.tmp Datei (Sie können dies unterdrücken, indem Sie -nocerts angeben, wenn Sie die Nachricht signieren).

Um die Überprüfung der Schlüsselzertifikat unterdrücken, wenn eine Nachricht zu überprüfen können Sie die -noverify Parameter auf den Befehl überprüfen liefern (obwohl openssl smime verify -noverify ein bisschen komisch aussehen tut).

+0

+1 für die 'openssl smime -verify -noverify' genau das, was ich brauchte! – PassKit

+2

@PassKit Obwohl der Befehl am meisten widersprüchlich aussieht. –

Verwandte Themen