2012-10-08 13 views
15

Mam certyfikat C.pfx, który został mi przekazany do pracy z OpenSSL. Certyfikat C.pfx ma następującą ścieżkę certyfikacji: C-> B-> AOpenSSL: nie można uzyskać certyfikatu lokalnego wystawcy

Przekonwertowałem C.pfx do PEM za pomocą następującego polecenia: openssl pkcs12 -w C.pfx -out C.pem -nodes - - WORKS OK

Otworzyłem certyfikat C.pem w edytorze plików i widzę, że ma on części PRYWATNE klucze RSA i CERTYFIKAT.

Widzę także certyfikaty A i B zainstalowane w sklepie Trusted Roor Certification Athorities w systemie Windows XP.

Celem jest do podpisania, szyfrowania, odszyfrować i zweryfikować plik testowy przy użyciu OpenSSL dla Windows w wersji 1.0.1c (jest to obecnie najnowsza wersja)

używam następujące polecenia:

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

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 

użyłem konsoli MMC eksportować B i certyfikaty CER pliki, a następnie przekształca je na PEM przy użyciu OpenSSL. Potem próbowałem następujące 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 

Wszystkie 3 próby w celu weryfikacji nie powiodło się z powodu następującego błędu:

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 

Co robię źle?

Odpowiedz

18

Podczas korzystania z openssl smime verify openssl próbuje sprawdzić, czy używany certyfikat jest zaufany, sprawdzając jego sygnaturę (to jest podpis w certyfikacie, a nie podpis w podpisanej wiadomości, którą chcesz zweryfikować). Aby to zrobić, musi mieć kopię certyfikatu dla klucza urzędu certyfikacji, który wystawił certyfikat.

Parametr -CAfile służy do przekazania nazwy pliku zawierającego ten certyfikat CA, a NIE certyfikatu klucza użytego do podpisania wiadomości. Użytkownik określiłby certyfikat klucza użytego do podpisania wiadomości za pomocą parametru -certfile ... ale w twoim przypadku certyfikat będzie znajdował się w pliku test.tmp (można to ukryć, podając -nocerts podczas podpisywania wiadomości).

Aby pominąć sprawdzanie certyfikatu klucza podczas sprawdzania komunikatu, można podać parametr -noverify dla polecenia verify (chociaż openssl smime verify -noverify wygląda trochę dziwnie).

+0

+1 dla 'openssl smime -verify -noverify' właśnie to, czego potrzebowałem! – PassKit

+2

@PassKit Chociaż polecenie wydaje się najbardziej wewnętrznie sprzeczne. –

Powiązane problemy