Používám tento příkaz:
openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/GTE_CyberTrust_Global_Root.pem
Funguje to. Pokud neurčím, že CAfile dostanu kód 20. Cert je v /etc/ssl/certs
a /usr/lib/ssl/certs -> /etc/ssl/certs
Je zahrnuto také v ca-certificates.crt
Co rozhoduje o tom, zda openssl může najít můj certifikát nebo ne a jak ho mohu přijmout tento certifikát, aniž byste jej výslovně specifikovali?
Komentáře
Odpovědět
Existuje známá chyba OpenSSL, kde s_client nekontroluje výchozí úložiště certifikátů, když nepředáte -CApath
nebo -CAfile
argument. OpenSSL na Ubuntu 14.04 trpí touto chybou, protože ukážu:
Verze:
ubuntu@puppetmaster:/etc/ssl$ openssl version OpenSSL 1.0.1f 6 Jan 2014
Když se mi nepodaří použít výchozí úložiště nedávejte `-ca:
ubuntu@puppetmaster:/etc/ssl$ openssl s_client -quiet -connect gmail.com:443 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify error:num=20:unable to get local issuer certificate verify return:0
Nyní předávám null jako -CApath
a funguje to:
ubuntu@puppetmaster:/etc/ssl$ openssl s_client -quiet -connect gmail.com:443 -CApath /dev/null depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = mail.google.com verify return:1
Bohužel si nemyslím, že existuje seznam dotčených verzí OpenSSL. Jediným způsobem, jak to zjistit, je otestovat ho.
Komentáře
- Děkuji. Používal jsem tuto verzi. Zdá se, že OpenSSL 1.1.0 problém neopravil. I ' m nevidíte zde uvedený problém: github.com/openssl/openssl/issues Můžete na problém odkazovat?
- It ' s ve starém nástroji pro sledování problémů RT . Je tam oprava, ' je za přihlášením (host: host) Je ' s problémem č. 3697 označen jako vyřešený. rt.openssl.org/Ti cket / Display.html? id = 3697
- Dobře, potvrdil jsem, že je to opraveno v 1.1, alespoň ve vidlici richsalz. Když jsem upgradoval, zpočátku jsem si nevšiml, že se základní adresář přesunul na
/usr/local/ssl
, který měl certs adresář nemapovaný na/etc/ssl/certs
. - Mohu ověřit, zda chyba existuje v CentOS 6.8 (OpenSSL 1.0.1e-fips 11. února 2013).
- Také
openssl version -d
vám poskytuje základní konfigurační adresář …
Odpověď
"How to get openssl to use a cert without specifying it via -CAfile".
Měl jsem stejné požadavek. Chtěl jsem použít adresář CA, kterým jsem " důvěřoval " místně. Nechtěl jsem žádné výchozí Trust store
znečišťující výsledky.
c_rehash
Před voláním příkazu verify
mě stránka nápovědy: man verify
navigovala k použití c_rehash
:
rehash prohledá adresáře a vypočítá hodnotu hash každého " .pem ", " .crt ", " .cer " nebo " .crl " soubor v zadaný seznam adresářů a vytváří symbolické odkazy pro každý soubor
export CERTS=/Users/{path_to_your_certs} [path to openssl]/openssl/bin/c_rehash ${CERTS}
Ověřte listový certifikát
openssl verify -CApath ${CERTS} local_leaf.pem local_leaf.pem: OK
Načtete kořenovou CA a IntCA do adresáře CERTS
.Pokud bych neprovedl krok opětovného mytí, došlo by k chybě 20 unable to get local issuer certificate
.
GTE_CyberTrust_Global_Root.pem
zprostředkující CA? Pokud ano, je možné, že váš webový server nedokáže poskytovat tento zprostředkující certifikační úřad CA spolu s certifikací vašeho webu. Tento nedostatek na vašem webovém serveru by mohl způsobit problémy s kompatibilitou s některými počítači. Na druhou stranu, pokud jeGTE_CyberTrust_Global_Root.pem
kořenový certifikát nejvyšší úrovně, měl by ve výchozím nastavení fungovat.openssl
nakonfigurován s žádnými kořenovými certifikáty nejvyšší úrovně? Zkoušeli jstegoogle.com:443
?