Hur får jag openssl att använda ett cert utan att specificera det via -CAfile

Jag använder det här kommandot:

openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/GTE_CyberTrust_Global_Root.pem 

Det fungerar. Om jag inte anger att CAfile får jag en kod 20. Certifikatet finns i /etc/ssl/certs och /usr/lib/ssl/certs -> /etc/ssl/certs Det ingår också i ca-certificates.crt

Vad styr om openssl kan hitta mitt cert eller inte och hur kan jag få det att acceptera detta cert utan att det uttryckligen anges?

Kommentarer

  • Är GTE_CyberTrust_Global_Root.pem en mellanliggande CA? I så fall kan det hända att din webbserver inte levererar det mellanliggande CA-certifikatet tillsammans med ditt webbplatscert. Denna brist från din webbserver kan orsaka kompatibilitetsproblem med vissa datorer. Å andra sidan, om GTE_CyberTrust_Global_Root.pem är ett toppcertifikat på toppnivå, ska det fungera som standard.
  • @GeorgeBailey Tack. Det är mellanliggande. Ingen verklig anledning att inte dela platsen: bigfishgames-a.akamaihd.net:443 Om jag ' ber våra webben att fixa detta, vad skulle jag fråga? Gör gärna ditt svar till ett svar (dvs. " Ingenting du kan göra på klienten, servern måste göra X ").
  • Det ' är konstigt. Jag hade förväntat mig att det skulle fungera en gång inkluderat i / etc / ssl / certs och ca-certifikat. Crt
  • Jo det är ' ännu inte uppenbart är problemet. Det ser ut som att servern tjänar en mellanliggande CA, och att SSLLabs behandlar CyberTrust som en toppnivå. Du kanske har fel när CyberTrust är en mellanhand, men kanske har du rätt. Jag ' är inte säker. Kontrollera certifikatkedjan / sökvägen i din favoritwebbläsare och / eller på SSLLabs . Kanske är openssl inte konfigurerad med några rotcertifikat på toppnivå? Har du provat google.com:443?
  • Samma beteende för google.com

Svar

Det finns ett känt OpenSSL-fel där s_client inte kontrollerar standardcertifikatlagret när du inte skickar -CApath eller -CAfile argument. OpenSSL på Ubuntu 14.04 lider av detta fel när jag kommer att visa:

Version:

ubuntu@puppetmaster:/etc/ssl$ openssl version OpenSSL 1.0.1f 6 Jan 2014 

Det går inte att använda standardbutiken när jag skicka inte `-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 

Nu skickar jag null som -CApath och det fungerar:

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 

Tyvärr tror jag inte att det finns en lista över berörda OpenSSL-versioner. Enda sättet att veta är att testa det.

Kommentarer

  • Tack. Jag använde den versionen. OpenSSL 1.1.0 verkar inte ha löst problemet. Jag ' m ser inte problemet som anges här: github.com/openssl/openssl/issues Kan du referera till problemet?
  • Det ' s i gamla RT-spårare . Det finns en patch där, den ' s bakom en inloggning (gäst: gäst) Det ' s nummer # 3697, markerat löst. rt.openssl.org/Ti cket / Display.html? id = 3697
  • Ok, jag bekräftade att detta är fixat i 1.1, åtminstone i richsalz-gaffeln. När jag uppgraderade märkte jag till en början inte att baskatalogen flyttades till /usr/local/ssl där en certs-katalog inte var mappad till /etc/ssl/certs.
  • Jag kan verifiera att felet finns i CentOS 6.8 (OpenSSL 1.0.1e-fips 11 feb 2013).
  • Även openssl version -d ger dig baskonfigurationskatalogen …

Svar

"How to get openssl to use a cert without specifying it via -CAfile". 

Jag hade samma krav. Jag ville använda en katalog med CA som jag " betrodde " lokalt. Jag ville inte ha något Trust store förorenande resultat.

c_rehash

Innan du ringer till kommandot verify, hjälpte hjälpsidan: man verify mig att använda c_rehash:

rehash genomsöker kataloger och beräknar ett hashvärde för varje " .pem ", " .crt ", " .cer " eller " .crl " i filen specificerad kataloglista och skapar symboliska länkar för varje fil

export CERTS=/Users/{path_to_your_certs} [path to openssl]/openssl/bin/c_rehash ${CERTS} 

Verifiera ett lövcert

openssl verify -CApath ${CERTS} local_leaf.pem local_leaf.pem: OK 

Du laddar Root CA och IntCA inuti katalogen CERTS.Om jag inte gjorde omstegningssteget skulle det ge mig fel 20 unable to get local issuer certificate.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *