Hay un servidor con una cadena SSL rota, según lo informado por esta verificación SSL :
Sé que este es un problema que debe resolverse en el servidor en sí, pero a veces es difícil de solucionar (no soy el administrador del servidor).
La cuestión es que Chrome / Mozilla / Edge en Windows confía en el certificado del sitio de todos modos :
Sin embargo, en una implementación de Gnu / Linux (Ubuntu 18.04 en Docker) el certificado no es confiable:
curl: (60) SSL certificate problem: unable to get local issuer certificate
Intenté update-ca-certificates
e incluso importé el certificado raíz de Globalsign. update-ca-certificates
informó un certificado duplicado en ese caso. De todos modos, nada funciona.
Como reproducir
Usando Docker:
docker run -it ubuntu:18.04
# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it # <---- "unable to get local issuer certificate"
¿Cómo puedo hacer que Gnu / Linux confíe en este certificado?
PD: el mismo certificado se implementa correctamente en otro servidor .
fuente
Respuestas:
La solución real para esto es garantizar que su servidor presente todos los certificados en la cadena y no solo el certificado de la entidad final (servidor).
Dirija al administrador del servidor a RFC 5246 Sección 7.4.2, que establece claramente que Este mensaje transmite la cadena de certificados del servidor al cliente.
Si su administrador se niega / no puede hacer esto por alguna razón, su opción alternativa es intentar
curl
trabajar con el apretón de manos mal formado.Según un mensaje en la lista de correo de Curl:
Debería poder agregar la CA raíz y todos los certificados intermedios a un paquete y señalarlo
curl
con la--cacert <file>
opción.A medida que sus navegadores funcionan, puede acceder a los certificados de CA correctos desde allí. En la pestaña de certificados (diferente para cada navegador, pero estoy seguro de que lo resolverá), vea la cadena de certificados. Haga doble clic en la entidad emisora raíz primera Globalsign Root CA - G1 y en el Detalles ficha, haga clic en Copiar en archivo ... . Guárdalo como
root.cer
. Haga lo mismo con AlphaSSL CA - SHA256 - G2 y guárdelo comoissuing.cer
. Une los dos juntos en un solo archivo (por ejemplochain.cer
) y úsalo como argumento para-cacert
.Como señaló amablemente @AB, el certificado que falta también se puede encontrar aquí .
Sus navegadores funcionan porque almacenan en caché los certificados de CA. Si ha navegado a un sitio web configurado correctamente en algún momento en el pasado, cuyo certificado fue emitido por la misma CA que el certificado de su servidor, el navegador lo almacenará en caché. Cuando visite posteriormente su sitio configurado incorrectamente, su navegador utilizará los certificados de CA en su caché para construir la cadena. Para usted, parece que todo está bien, aunque detrás de escena, el servidor está mal configurado.
Tenga en cuenta que en Windows, IE / Edge y Chrome comparten el mismo caché, mientras que Firefox usa el suyo.
Además de lo anterior, IE / Edge y Chrome (ya que comparten la misma pila de cifrado) usarán una extensión dentro de los certificados llamada AuthorityInformationAccess . Esto tiene una opción de caIssuer que proporciona una URL desde la cual se puede descargar el certificado CA del certificado de entidad final. Por lo tanto, incluso si uno de estos navegadores no ha almacenado en caché los certificados faltantes de la navegación anterior, puede recuperarlo si es necesario. Tenga en cuenta que Firefox no hace esto, por lo que a veces Firefox puede mostrar errores de certificado cuando IE / Edge y Chrome parecen funcionar.
fuente
--cacert cacert.pem
pero CURL aún no acepta el certificado.echo q | openssl s_client -showcerts -connect betriebsheft.vog.it:443
y verá que su servidor solo presentará un certificado. Debe haber dos, el certificado de entidad final (que se presenta) y la CA emisora, el certificado Alpha SSL - SHA256 - G2. Este último no está siendo enviado por el servidor, pero debería.