Mam trzy certyfikaty w łańcuchu:
- root.pem
- pośredni.pem
- john.pem
Gdy openssl x509 -in [filename] -text -noout
badam je za pomocą , wyglądają dobrze, root.pem wygląda na podpisany przez siebie (Emitent == Temat), a Przedmiotem każdego certyfikatu jest, zgodnie z oczekiwaniami, Emitent kolejnego certyfikatu.
I rzeczywiście mogę zweryfikować łańcuch aż do certyfikatu pośredniego:
$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK
Jednak plik john.pem zawiedzie:
$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate
Według mojej najlepszej wiedzy oznacza to, że openssl nie może znaleźć emitenta dla pliku pośredniego.pem. Co nie ma sensu, ponieważ root.pem jest rzeczywiście emitentem pośredniego.pem.
czego mi brakuje?
Edit: I początkowo pisał odpowiedź mówiąc, że root.pem i intermediate.pem powinny być łączone w jeden plik, a następnie powinno się użyć tego pliku jako parametr -CAfile
. Jest to NIEPRAWIDŁOWE, ponieważ domyślnie ufa pośredni.pem, jak zauważa Johannes Pille . Przeczytaj link, który opublikował w mojej skasowanej odpowiedzi: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html
źródło
Odpowiedzi:
Nie musisz zbierać dwóch certyfikatów razem, aby je zweryfikować.
Jeśli masz następujące trzy certyfikaty:
I ufasz tylko root.pem, a następnie zweryfikujesz
john.pem
za pomocą następującego polecenia:Gdybyś miał wiele półproduktów, mógłbyś po prostu łańcuch
-untrusted intermediate2.pem -untrusted intermediate3.pem ...
źródło
openssl
podniosłbym je i zweryfikowałby certyfikaty. Czy istnieje powód, aby tak się działo? Na przykład osoba, która podpisała certyfikat użytkownika, nie podpisała go za pomocą Pośredniego, ale rootem, czy coś takiego?untrusted
flagi raz. Wielokrotne użycie niezaufanej flagi nie działa.-untrusted
opcji (w dowolnej kolejności) lub jedna-untrusted
opcja wskazująca na pakiet produktów pośrednich (połączonych w dowolnej kolejności). Dotyczy to wersji OpenSSL 1.1.1c na Ubuntu.To, co powiedział @antiduh, działa tylko dla mnie w przypadku pojedynczego certyfikatu pośredniego. Dodanie więcej niż jednego
-untrusted intermediate.pem
polecenia wydaje się nie działać. Nie jestem pewien, czy jest to związane z konkretną wersją openssl.Zgodnie z dokumentem openssl: [ https://linux.die.net/man/1/verify]
W moim przypadku mam łańcuch taki jak:
root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem
przez cat intermed1.pem i intermed2.pem do jednego pliku pośredniego łańcucha.pem, a następnie uruchom
openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem
działa dla mnie.Wygląda też na to, że rozszerzenie in należy ustawić
basicConstraints = CA:true
inaczej, w przeciwnym razie nadal napotyka błąd weryfikacji raportu otwarcia.źródło