Actualizar curl en centos 7

A todos los sistemas nos encanta centos 7, es estable, irrompible y fácil de administrar, pero es conocido el problema de actualizar librerías ya que desde hace años no se actualizan las oficiales.

Eso nos genera muchos problemas ya que no pasan muchas auditorias de seguridad, uno de los casos mas comunes se trata de curl, ya que es usado por entornos web como apache+php y la ultima versión de curl es la 7.29.0.

Con esta pequeña entrada voy a explicar como actualizar curl en centos 7 de una manera rápida y sencilla.

Lo primero que haremos es añadir el repositorio de terceros con la librería de curl actualizada.

rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-3-7.rhel7.noarch.rpm

Este repositorio se actualiza constantemente, de no estar disponible la url solo tenemos que acceder a http://www.city-fan.org/ftp/contrib/yum-repo/ y coger la mas reciente.

El siguiente paso es habilitar el repositorio e instalar / actualizar curl.

yum --enablerepo=city-fan.org install libcurl libcurl-devel curl -y

Y ya tendríamos actualizado curl en el sistema y con un “curl -V” podemos ver la versión actualizada.

Si en el servidor tenemos un apache+php y queremos que se actualice la versión de curl, solo tendríamos que reiniciar el servidor.

systemctl restart httpd.service

Y desde la función phpinfo() podemos ver como el curl se ha actualizado.

¿Como solucionar el error “curl: (60) SSL certificate problem: unable to get local issuer certificate “?

Estamos ante un error poco común, si has instalado curl desde repositorio con yum o con apt probablemente nunca encontraras un error de este tipo.

Este error suele aparecer en distros antiguas y esta relacionada con el cambio de versión de curl, si te ha salido este error es porque seguramente hayas actualizado curl compilándolo y no hayas incluido el certificado de confianza.

Tambien puede aparecer al intentar hacer un wget con las nuevas versiones de openssl:

OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
 Unable to establish SSL connection

Estos errores son debidos a que en versiones antiguas de curl o openssl no se establecía relación de confianza y no se necesitaba ningún certificado, pero las versiones actuales si lo requieren y al no encontrarlo el sistema devuelve este error.

La solución es bastante sencilla, basta con descargarse el certificado en la página oficial de  curl https://curl.haxx.se/ca/cacert.pem y guardarlo en la ubicación de los certificados de la versión de Linux en la que estés trabajando.

"/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
"/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
"/etc/ssl/ca-bundle.pem",                            // OpenSUSE
"/etc/pki/tls/cacert.pem",                           // OpenELEC
"/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7

En el caso de que necesites utilizar curl con php bastaría con añadirlo al fichero de configuración php.ini

curl.cainfo = "/etc/ssl/certs/cacert.pem"
openssl.cafile  = "/etc/ssl/certs/cacert.pem"

Con estos pasos el error queda resuelto y podrás utilizar curl perfectamente.