Búsqueda de sitios web

Adición de certificados raíz de confianza en Linux


Este artículo explicará cómo agregar (instalar) un nuevo certificado a la lista de certificados raíz confiables en Linux.

Supongamos que está utilizando un certificado SSL/TLS autofirmado pero no desea obtener

SEC_ERROR_UNKNOWN_ISSUER

error en el navegador del cliente cada vez que se abre su sitio.

En este ejemplo, instalaremos un certificado autofirmado desde un sitio web de IIS que se ejecuta en un servidor de Windows.

Para verificar si su host Linux no puede verificar (y por lo tanto no confía) el certificado SSL en un sitio determinado, ejecute el siguiente comando:

$ curl -I https://a-d.local
curl: (60) SSL certificate problem: unable to get local issuer certificate. More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

En este caso, debemos agregar la CA raíz de este sitio web a la lista de certificados confiables en Linux.

¿Cómo instalar el certificado raíz en Trust Store en Linux?

Si desea actualizar su almacén de certificados de confianza en Linux, lo primero que necesita es el archivo PEM del certificado con un

*.CRT

extensión. Un certificado PEM es un archivo de texto en formato base64 que comienza con la línea

—-BEGIN CERTIFICATE—

- y termina con

——END CERTIFICATE——

Si tiene el archivo de su certificado almacenado en formato DER, puede convertirlo a PEM usando el comando openssl:

$ openssl x509 -in my_trusted_sub_ca.der -inform der -out my_trusted_sub_ca.cer

Ahora veamos cómo puede agregar su certificado raíz de CA a la lista de confianza en las distribuciones de Linux basadas en DEB (Ubuntu, Debian, Mint, Kali Linux, etc.).

Primero, copie los archivos de su certificado en la carpeta del almacén de certificados (/usr/local/share/ca-certificates/):

$ sudo cp my_trusted_sub_ca.crt /usr/local/share/ca-certificates/
$ sudo cp my_trusted_root_ca.crt /usr/local/share/ca-certificates/

Actualice el almacén de certificados con el comando:

$ sudo update-ca-certificates -v

Si no se encuentra el comando, debe instalar el paquete en su host Ubuntu/Debian:

$ sudo apt-get install -y ca-certificates

Si los certificados se agregaron correctamente, verá un mensaje que indica que el certificado se copió en /etc/ssl/certs/:

Updating certificates in /etc/ssl/certs…
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d

Aquí hay otra forma de agregar nuevos certificados a la tienda de confianza en Linux:

$ sudo dpkg-reconfigure ca-certificates

Consulte la lista de certificados y seleccione los que desea agregar a los confiables.

En Linux, la lista de certificados de confianza se almacena en el archivo /etc/ssl/certs/ca-certificates.crt. Los dos comandos anteriores actualizarán este archivo y agregarán información sobre los nuevos certificados.

Utilice el siguiente comando para asegurarse de que sus certificados se hayan agregado a la lista de confianza:

$ awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i YourCASubj

Especifique la parte del nombre común de su certificado en lugar de YourCASubj para buscar en la tienda por tema.

Puede ver si su sistema operativo confía en el certificado usando el comando:

$ openssl verify my_trusted_sub_ca.crt

Si su host Linux no confía en el certificado, obtendrá un error:

error 20 at 0 depth lookup: unable to get local issuer certificate
error my_trusted_sub_ca.crt: verification failed

Puede usar curl para asegurarse de que el sitio use un certificado SSL de confianza:

$ curl -I https://a-d.local

Todo está bien, el certificado es de confianza {

HTTPOnly: secure

}.

Tenga en cuenta que también se puede agregar un archivo de certificado a la lista de confianza manualmente:

$ sudo mkdir /usr/share/ca-certificates/extra
$ sudo cp my.crt /usr/share/ca-certificates/extra/mycert1.crt
$ sudo vim /etc/ca-certificates.conf
exta/mycert1.crt
$ sudo update-ca-certificates

Para eliminar el certificado de la lista de confianza, simplemente elimine su archivo .crt:

$ sudo rm /usr/local/share/ca-certificates/yourcert.crt

Y actualice la tienda de CA:

$ sudo update-ca-certificates --fresh

Para agregar un certificado a la lista de confianza en distribuciones de Linux basadas en RPM (CentOS, Oracle, RHEL, Rocky Linux, Fedora), use el siguiente procedimiento:

  1. Instale el paquete de certificados CA:

    # yum install ca-certificates
  2. Copie el archivo del certificado en /etc/pki/ca-trust/source/anchors/:

    # cp mycert.crt /etc/pki/ca-trust/source/anchors/
  3. Actualice el almacén de confianza del certificado:

    # update-ca-trust force-enable
    # update-ca-trust extract

Y aquí hay un artículo similar sobre cómo administrar el almacén de certificados raíz de confianza en Windows.

Adición de un certificado de CA de confianza a Chrome y Firefox

Después de realizar los pasos anteriores, todas las herramientas del sistema confiarán en los sitios web que usan esta CA. Sin embargo, esto no afectará a los navegadores web Mozilla Firefox o Google Chrome, ya que seguirán mostrando un mensaje de advertencia sobre el certificado que no es de confianza.

La cuestión es que Firefox, Chromium, Google Chrome, Vivaldi e incluso el cliente de correo electrónico Mozilla Thunderbird no utilizan el almacén de certificados del sistema Linux. El almacén de certificados para estos programas se puede encontrar en el directorio del usuario en el archivo cert8.db (para Mozilla) o cert9.db (para Chromium y Chrome). Para actualizar estos almacenes de certificados, puede usar la herramienta certutil del paquete libnss3-tools.

Primero, instale el paquete:

$ sudo apt install libnss3-tools

Ahora ejecute el siguiente script bash para agregar sus certificados a la tienda a través de NSS:

#!/bin/bash
certfile="my_rusted_root_ca.crt"
certname="My Root CA1"
for certDB in $(find ~/ -name "cert8.db")
do
certdir=$(dirname ${certDB});
certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d dbm:${certdir}
done
for certDB in $(find ~/ -name "cert9.db")
do
certdir=$(dirname ${certDB});
certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
done

Una vez hecho esto, todos los navegadores confiarán en los sitios web con la CA dada.

Artículos relacionados