cURL error 60: SSL certificate problem: unable to get local issuer certificate

Escenario

Todo empezó con el aviso de un proveedor. Un plugin de WordPress fallaba con el siguiente error:
cURL error 60: SSL certificate problem: unable to get local issuer certificate

Problema

Una búsqueda rápida con Google me lleva a la conclusión de que hay que editar el fichero de configuración php.ini. A fin de averiguar donde se encuentra el fichero en cuestión me sirvo del comando php -i | grep "Loaded Configuration File", que devuelve la siguiente información:
Loaded Configuration File => /etc/php/7.4/cli/php.ini
A continuación descargo http://curl.haxx.se/ca/cacert.pem y lo guardo en /etc/ssl/certs/. Edito los ficheros /etc/php/7.4/cli/php.ini y /etc/php/7.4/fpm/php.ini y añado/completo las siguientes directrices: Reinicio nginx y el problema persiste.

Solución

Me huelo que el problema va a estar relacionado con la cadena de confianza de certificado SSL del sitio web. Un openssl s_client -connect acme.com:443 me lo confirma:
CONNECTED(00000003)
depth=0 CN = *.acme.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = *.acme.com
verify error:num=21:unable to verify the first certificate
verify return:1
El servidor web —en este caso nginx— no está devolviendo la cadena entera del certificado. La solución pasa por editar el certificado referenciado en la clave ssl_certificate del fichero de configuración del sitio /etc/nginx/sites-enabled/acme.com y añadir los certificados que completan la cadena. Para este sitio usamos Sectigo (antes conocido como Comodo). Los certificados los entrega en dos ficheros:
  • STAR_acme_com.crt
  • STAR_acme_com.ca-bundle
Pues bien, hay que encadenar el ca-bundle al final del certificado antes de utilizarlo.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *