Il certificato del server termina con il certificato CA rimosso, funziona ancora?

1

Contesto: ho un codice C ++ che usa curl con GnuTLS che non riesce a connettersi al link da quando Ubuntu aggiornato il pacchetto ca-certificates . Questo, per quanto posso dire, corrisponde al bug Debian # 858064 .

Questa non è (ancora) la parte interessante, però. Nota, in particolare, che questo codice C ++ funziona bene da diversi anni e funziona se fornisco la versione precedente del file /etc/ssl/certs/ca-certificates.crt .

Problema: quando utilizzo i seguenti comandi:

$ openssl s_client -connect sheets.googleapis.com:443 \
    -CApath /etc/ssl/certs/ca-certificates.crt
$ gnutls-cli sheets.googleapis.com
    --x509cafile /etc/ssl/certs/ca-certificates.crt
$ curl --cacert /etc/ssl/certs/ca-certificates.crt \
    https://sheets.googleapis.com

... loro tutti funzionano correttamente. Così come Google Chrome e Mozilla Firefox.

E non riesco a capire perché funzionino, quando il mio codice C ++ non . Fallisce con CURLE_SSL_CACERT (60) : il certificato peer non può essere autenticato con certificati CA noti.

Il server di Google restituisce la seguente catena di certificati, secondo OpenSSL; il GnuTLS sembra uguale, per quanto ne so; e vedo 3 certificati in Wireshark:

Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.googleapis.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Domanda: sto cercando di capire come GnuTLS, in particolare, costruisce e verifica la sua catena di certificati su Linux. Sembra che il certificato "Equifax Secure Certificate Authority" sia stato rimosso nell'aggiornamento ca-certificates , eppure non sembra aver rotto nulla (tranne il mio codice).

Se guardo il certificato in Google Chrome, il certificato di root non viene mostrato e la catena termina con il certificato "GeoTrust Global CA", che sembra autofirmato.

  • Perché OpenSSL mostra risultati diversi da Chrome?
  • Perché OpenSSL (apparentemente) si fida ancora di un certificato CA rimosso?
  • Come faccio a verificare che i certificati mostrati da OpenSSL / GnuTLS / etc. mappare ai file rilevanti in /etc/ssl/certs ?
posta Roger Lipscombe 23.10.2017 - 21:58
fonte

1 risposta

4

Why is OpenSSL showing different results from Chrome?

OpenSSL mostra la catena di certificati inviata dal server. Chrome sta mostrando la catena utilizzata per la convalida. Poiché esiste un certificato CA autofirmato per GeoTrust Global CA che utilizza la stessa chiave di quella firmata da Equifax, il certificato CA Equifax non è più necessario per verificare la catena.

Questo certificato CA autofirmato per GeoTrust Global CA è contenuto anche nelle versioni correnti del pacchetto ca-certificates in modo che Equifax non sia più necessario per le attuali versioni di OpenSSL per convalidare la catena. Si è verificato un errore con versioni OpenSSL precedenti in cui non è riuscito a convalidare la catena se la CA firmata Equifax è stata inclusa nella catena, ma la CA Equifax non si trovava nel trust store. Vedi Verifica SSL richieste Python .

Why is OpenSSL (apparently) still trusting a removed CA certificate?

Non è così. Si fida invece della CA globale GeoTrust inclusa nel truststore e ignora il certificato di catena rilasciato da Equifax (che ha la stessa chiave).

How do I check that the certificates shown by OpenSSL/GnuTLS/etc. map to the relevant files in /etc/ssl/certs

Non sono sicuro di cosa intendi con "mappa". Ma puoi fare in modo che s_client ti mostri tutti i certificati con -showcerts e poi controlla se questi certificati sono esatti inclusi nel tuo trust store (cioè confronto tra stringhe). Se si desidera invece verificare se una catena di certificati specifica può essere verificata con il proprio archivio di fiducia, utilizzare openssl verify -CAfile ca-certificates.pem -untrusted chain-certs.pem leaf-cert.pem . Vedi anche Usa openssl per verificare individualmente i componenti di un catena di certificati .

    
risposta data 23.10.2017 - 22:47
fonte

Leggi altre domande sui tag