Contexto: Tengo un código C ++ que utiliza curl con GnuTLS que no se puede conectar a enlace desde Ubuntu actualizado el paquete ca-certificates
. Eso, por lo que puedo decir, corresponde al error de Debian # 858064 .
Esa no es (todavía) la parte interesante, sin embargo. Tenga en cuenta, en particular, que este código C ++ ha estado funcionando bien durante varios años, y funciona si le proporciono la versión anterior del archivo /etc/ssl/certs/ca-certificates.crt
.
Problema: Cuando uso los siguientes comandos:
$ 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
... ellos todos funcionan correctamente. Al igual que Google Chrome y Mozilla Firefox.
Y no puedo entender por qué funcionan, cuando mi código de C ++ no . Falla con CURLE_SSL_CACERT (60)
: el certificado de igual no se puede autenticar con certificados de CA conocidos.
El servidor de Google devuelve la siguiente cadena de certificados, de acuerdo con OpenSSL; el GnuTLS se ve igual, por lo que puedo decir; y veo 3 certificados en 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
Pregunta: Estoy tratando de entender cómo GnuTLS, en particular, construye y verifica su cadena de certificados en Linux. Ese certificado "Equifax Secure Certificate Authority" parece haber sido eliminado en la actualización ca-certificates
y, sin embargo, no parece haber roto nada (excepto mi código).
Si miro el certificado en Google Chrome, ese certificado raíz no se muestra, y la cadena termina en el certificado "GeoTrust Global CA" en su lugar, que parece estar autofirmado.
- ¿Por qué OpenSSL muestra resultados diferentes de Chrome?
- ¿Por qué OpenSSL (aparentemente) sigue confiando en un certificado de CA eliminado?
- ¿Cómo compruebo que los certificados mostrados por OpenSSL / GnuTLS / etc. mapear a los archivos relevantes en
/etc/ssl/certs
?