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
?