Jak získat openssl k použití certifikátu bez jeho zadání přes -CAfile

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

  • Je 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 je GTE_CyberTrust_Global_Root.pem kořenový certifikát nejvyšší úrovně, měl by ve výchozím nastavení fungovat.
  • @GeorgeBailey Díky. Je to střední. Žádný skutečný důvod nesdílit umístění: bigfishgames-a.akamaihd.net:443 Pokud ' žádám naše webové lidi, aby to opravili, na co bych se ptal? Odpověď neváhejte učinit odpovědí (tj. " Na klientovi nemůžete dělat nic, server musí udělat X ").
  • To je ' divné. Čekal bych, že to bude fungovat, jakmile bude zahrnuto v / etc / ssl / certs a ca-certificates. Crt
  • No ' zatím není zřejmé, zda je server je problém. Vypadá to, že server obsluhuje zprostředkovanou CA a že SSLLabs považuje CyberTrust za kořen nejvyšší úrovně. Možná se mýlíte v tom, že CyberTrust je meziprodukt, ale možná máte pravdu. Nejsem si jistý '. Zkontrolujte řetězec / cestu certifikátu ve vašem oblíbeném prohlížeči nebo na SSLLabs . Možná není openssl nakonfigurován s žádnými kořenovými certifikáty nejvyšší úrovně? Zkoušeli jste google.com:443?
  • Stejné chování pro google.com

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *