Arricciatura: impossibile ottenere il certificato dell'emittente locale. Come eseguire il debug?


14

Ho un problema strano. Aggiornato la mia macchina di sviluppo LAMP (Debian) a PHP 7. Successivamente non riesco più a collegarmi a un'API crittografata TLS specifica tramite Curl.

Il certificato SSL in questione è firmato da thawte.

curl https://example.com

mi da

curl: (60) SSL certificate problem: unable to get local issuer certificate

mentre

curl https://thawte.com

che - ovviamente - è anche firmato dalle opere di Thawte.

Posso accedere al sito API tramite HTTPS su altre macchine, ad esempio il mio desktop tramite arricciatura e nel browser. Quindi il certificato è definitivamente valido. La valutazione di SSL Labs è A.

Qualsiasi altra richiesta Curl dalla mia macchina di sviluppo ad altri siti crittografati SSL funziona. I miei certificati di root sono aggiornati. Per verificare, ho corso update-ca-certificates. Ho anche scaricato http://curl.haxx.se/ca/cacert.pem su / etc / ssl / certs e sono corso c_rehash.

Ancora lo stesso errore.

Esiste un modo per eseguire il debug del processo di verifica e vedere quale ricciolo certificato (o openssl) dell'emittente locale sta cercando ma non trova, ad esempio un nome file?

AGGIORNARE

curl -vs https://example.com

mi dice (IP + Dominio anonimo)

* Hostname was NOT found in DNS cache
*   Trying 192.0.2.1...
* Connected to example.com (192.0.2.1) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0

E

echo | openssl s_client -connect example.com:443

CONNECTED(00000003)
depth=2 C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "(c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=DE/ST=XYZ/CN=*.example.com
   i:/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
 1 s:/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
 2 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
   i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
subject=/C=DE/ST=XYZ/CN=*.example.com
issuer=/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
---
No client certificate CA names sent
---
SSL handshake has read 4214 bytes and written 421 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: [...]
    Session-ID-ctx:
    Master-Key: [...]
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 5a 95 df 40 2c c9 6b d5-4a 50 75 c5 a3 80 0a 2d   Z..@,.k.JPu....-
    [...]
    00b0 - d5 b9 e8 25 00 c5 c7 da-ce 73 fb f2 c5 46 c4 24   ...%.....s...F.$

    Start Time: 1455111516
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
DONE

1
Potresti dare un output dettagliato di almeno quei cmd? curl -vs https://example.com echo | openssl s_client -connect example.com:443
François

Risposte:


8

Usando openssl s_client -connect thawte.com:443spettacoli:

---
Certificate chain
 0 s:/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/O=Thawte, Inc./C=US/ST=California/L=Mountain View/businessCategory=Private Organization/serialNumber=3898261/OU=Infrastructure Operations/CN=www.thawte.com
   i:/C=US/O=thawte, Inc./CN=thawte Extended Validation SHA256 SSL CA
 1 s:/C=US/O=thawte, Inc./CN=thawte Extended Validation SHA256 SSL CA
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2008 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA - G3
---

L'ultima "i" mostra la CA radice autofirmata di emissione. Immagino che quella particolare CA radice Thawte , cioè. la CA radice principale - Cert G3 , non si trova nella /etc/ssl/certsdirectory (come indicato curlnell'output; openssl s_clientnon ha un percorso CA predefinito e deve essere specificato esplicitamente, ad es -CApath /etc/ssl/certs .).

L'aggiunta esplicita di quel certificato alla tua /etc/ssl/certsdirectory (e la sua riesecuzione c_rehash) certamente non farebbe male. E se funziona, ad es. Come verificato usando openssl s_client -connect example.com:443 -CApath /etc/ssl/certs, allora sai che quel update-ca-certificatescomando potrebbe aver bisogno di un po 'di esame / debugging, sul perché non ha raccolto questa CA principale.

Ora, è possibile che la CA radice sopra sia già nella /etc/ssl/certsdirectory e i passaggi precedenti non abbiano avuto alcun effetto. In tal caso, ci sono altri due certificati CA da emettere da verificare (almeno nella catena di certificati offerti da thawte.com:443): thawte CA radice principale e thawte SSL CA - G2 . Ripetere i passaggi precedenti per installare questi certificati nella /etc/ssl/certsdirectory (e rieseguire c_rehash) potrebbe funzionare. Dal momento che queste due sono CA intermedie e non CA principali, l'assenza di una di esse spiegherebbe i tuoi risultati e ci si potrebbe aspettare come certificati trascurati update-ca-certificates.

Spero che sia di aiuto!


Grazie! Scaricare il certificato intermedio "thawte SSL CA - G2" su / etc / ssl / certs e rieseguire c_rehash ha risolto il problema!
Rob,

1
Questo openssl s_client -connect <server>:443 -CAfile cacert.pemcomando è molto utile ... grazie!
Kris

0

Ciò potrebbe essere causato dall'ordine errato del sito, dall'emissione, dai certificati intermedi e root nel file del certificato della chiave pubblica del sito.

Il browser visualizza i certificati nella direzione dall'alto verso il basso (radice, intermedio, di emissione, sito) ma il certificato deve trovarsi nella direzione dall'alto verso il basso (sito, di emissione, intermedio, radice).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.