
En un servidor que administramos para un cliente, ninguna aplicación puede acceder a determinadas URL HTTPS, por ejemplo:
$ wget https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
--2022-12-21 15:59:58-- https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
Resolving open-data.bielefeld.de (open-data.bielefeld.de)... 194.8.223.72
Connecting to open-data.bielefeld.de (open-data.bielefeld.de)|194.8.223.72|:443... connected.
ERROR: cannot verify open-data.bielefeld.de's certificate, issued by ‘CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB’:
Unable to locally verify the issuer's authority.
To connect to open-data.bielefeld.de insecurely, use `--no-check-certificate'.
Varios programas (incluidos los scripts de R y Python) tienen este problema, pero puedo acceder a la URL desde mi navegador de escritorio sin problemas. Supongo que hay un problema con los certificados raíz o la cadena de certificados. El servidor ejecuta Ubuntu 20.04 LTS y todos los paquetes están actualizados. ¿Qué podría causar este problema? ¿Hay alguna manera de solucionarlo (de forma segura y sencilla) por mi parte?
Respuesta1
De hecho, faltaba un certificado, no un certificado raíz sino un certificado intermedio. Se supone que los servidores HTTPS envían todos los certificados de la cadena (menos la raíz) con su respuesta, pero algunos servidores no lo hacen. Los navegadores web pueden hacer frente a esto utilizando una técnica llamada persecución AIA (Acceso a la información de autoridad)*, sin embargo, muchos otros clientes no implementan esto.
Como mencionó Steffen Ulrich en su comentario, puede encontrar el certificado que falta e instalarlo en su sistema.
Primero obtenga el certificado. Puede hacerlo manualmente consultando el sitio enSSLLabsy buscar en Google la huella digital del certificado faltante. El certificado debe estar en formato PEM (codificado en base64 con BEGIN y END CERTIFICATE). También escribí un script para obtener el certificado a través de AIA antes de darme cuenta de que se puede hacerlo manualmente:https://github.com/jdmansour/fetch-intermediate-certs
Luego, para importar el certificado en Ubuntu/Debian, colóquelo /usr/share/ca-certificates/extra
(cree el directorio si es necesario) y ejecute sudo dpkg-reconfigure ca-certificates
. Le preguntará si debe confiar en los nuevos certificados en las actualizaciones del sistema; elija la opción que desee, creo que "sí" es la opción predeterminada. En la siguiente pantalla, puede habilitar su nuevo certificado. La mayoría de las herramientas que utilizan OpenSSL deberían utilizarlo inmediatamente.
*) Hasta donde yo sé, Firefox no implementa AIA, pero de alguna manera también funciona allí.