11 votos

App / curl sigue obteniendo error de certificado caducado debido a un certificado Let's Encrypt caducado

Una aplicación de código abierto que se ejecuta en mi sistema MacOS 10.13.6 y 10.14.6 no puede acceder a un sitio web a través de https que utiliza un certificado Let's Encrypt. Si utilizo curl para acceder al mismo sitio, también obtiene un error sobre el certificado caducado.

Esta es la salida de curl -vv con el nombre de host y la dirección IP redactados:

* Rebuilt URL to: https://hostname/
*   Trying x.x.x.x...
* TCP_NODELAY set
* Connected to hostname (x.x.x.x) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: certificate has expired
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default...
(rest of text not relevant and removed)

He confirmado que el certificado ISRG Root X1 está instalado en Keychain Access y es de confianza.

Además, puedo acceder al sitio usando Safari o cualquier otro navegador web. Sin embargo, la aplicación en cuestión sigue fallando, al igual que curl .

¿Qué tengo que hacer para solucionar esto? No puedo usar el modo inseguro en curl ya que el problema que estoy tratando de arreglar es la aplicación que no puede acceder al sitio. No estoy seguro de qué biblioteca está utilizando la aplicación para https - puede ser libcurl, pero sospecho que está fallando por la misma razón curl es.

Pequeña adición: la aplicación de código abierto utiliza OpenSSL 1.1.1j.

20voto

GuyGizmo Puntos 243

OpenSSL en MacOS no utiliza el llavero del sistema (lo que tiene sentido ya que es una biblioteca multiplataforma) sino que tiene su propio archivo .pem que contiene sus certificados Root. Aunque mis sistemas tienen una versión más reciente de OpenSSL instalada mediante homebrew y/o MacPorts, el archivo pem de OpenSSL de todo el sistema, ubicado en /etc/ssl/cert.pem, estaba desactualizado y no incluía el certificado ISRG Root X1.

La solución:

  1. Cambiar el nombre de /etc/ssl/cert.pem a otra cosa. (Sugiero /etc/ssl/cert.pem.org)

  2. Descargue la última cacert.pem de https://curl.se/docs/caextract.html

  3. Cambia el nombre a cert.pem

  4. Cópialo en /etc/ssl/cert.pem

Ahora curl y cualquier otra aplicación que utilice OpenSSL puede acceder a sitios web firmados con los certificados actuales de Let's Encrypt.

Como alternativa, el paquete MacPorts curl-ca-bundle instala un archivo pem que contiene ISRG Root X1 para /opt/local/etc/openssl/cert.pem que también se puede utilizar.

Otras posibles soluciones:

  • Añada manualmente el certificado ISRG Root X1 a /etc/ssl/cert.pem

  • Configure OpenSSL para que utilice un archivo .pem diferente para sus certificados root, como por ejemplo /opt/local/etc/openssl/cert.pem

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X