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

  • Cómo instalar un certificado letsencrypt para un sitio gestionado por Cloudflare

    Escenario Estamos usando CloudFlare para uno de nuestros dominios y necesitamos instalar o renovar un certificado de Letsencrypt. CloudFlare es un servicio que, entre otras, proporciona un proxy (intermediario) entre los visitantes del sitio y el servidor donde está hospedado el sitio web. Configuración de Cloudflare Gestionar un sitio web desde CloudFlare es sencillo. Después…

  • |

    Traducción de variables en javascript

    Escenario Estoy trabajando en una aplicación multi-lenguaje desarrollada con la plataforma spring boot. Para quien no conozca esta plataforma de desarrollo, spring boot te permite gestionar varios lenguajes gracias a un sistema que utiliza ficheros de tipo propiedades para almacenar las traducciones. Los nombres de estos ficheros han de respetar la siguiente convención, messages_{código ISO…

  • |

    Como (no) cambiar la batería de un Sennheiser mm100

    Aviso a navegantes: es la primera vez que manipulo un componente electrónico tan pequeño y delicado. Si comparto mi experiencia es por dejar documentado mi apaño, seguro que alguien más experimentado en estos menesteres lo haría de otra manera, o sea, bien. A mi favor tengo que decir que me ha valido y, bueno, me…

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Cómo crear una cabecera de licencia en Netbeans

    Escenario Un encabezado en los ficheros de código puede ser un requisito del trabajo o del proyecto de código abierto al que contribuyes. O sencillamente te gusta que tus ficheros de código dispongan de un impronta común. Problema En realidad ninguno. Supongo que la mayoría de los editores modernos ofrecen la posibilidad de usar una…

Deja una respuesta

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