GNU/Linux >> Tutoriales Linux >  >> Linux

Hacer que los certificados de CA estén disponibles para las herramientas de línea de comandos de Linux

Todos los navegadores web gráficos conocidos se envían con una colección de certificados de autoridad de certificación (CA) conocidos y confiables, por lo que cuando visita un sitio con un certificado firmado por uno de esos certificados de CA, el navegador también confía en el sitio. De lo contrario, el navegador pasa por una serie de advertencias y opciones para agregar una excepción después de alentarlo a verificar el certificado. También hay opciones para importar certificados CA adicionales, como los documentados para Firefox.

Uso de certificados de CA con utilidades de línea de comandos

Los certificados de CA también pueden estar disponibles en la línea de comandos. Un paquete incluido con muchas distribuciones, incluidas Red Hat Enterprise Linux y Fedora, se llama ca-certificates . Este paquete se describe a sí mismo como que contiene "el conjunto de certificados de CA elegidos por la Fundación Mozilla para usar con la PKI de Internet". Este paquete incluye los mismos certificados CA conocidos que se encuentran en Firefox. Puede ser utilizado por cualquier aplicación CLI que busque directamente en /etc/pki/ca-trust/extracted directorio, junto con las aplicaciones CLI que cargan uno de los módulos de confianza PKCS#11.

Utilidades de línea de comandos como curl y wget puede utilizar estos certificados de CA para validar certificados de servidor. Muchas herramientas provistas con Red Hat Enterprise Linux también usan estos certificados, incluidas las interacciones con el soporte de Red Hat (redhat-support-tool ), clústeres de Red Hat OpenShift (oc ), y servidores Red Hat Satellite 6 (hammer ). Muchas otras interacciones con las interfaces API del servidor también usan SSL/TLS y deberían validar los certificados ofrecidos.

Con los ca-certificates paquete instalado, puedo usar curl para ver o descargar contenido de URL de un sitio mediante un certificado firmado por una CA conocida sin errores: 

$ curl https://access.redhat.com -o /tmp/sample

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 103k 0 103k 0 0 339k 0 --:--:-- --:--:-- --:--:-- 337k

Si trato de acceder a un sitio interno que tiene un certificado autofirmado (o un certificado firmado por una CA que no está incluido con los ca-certificates paquete) Recibo un mensaje que dice que se rechazó la conexión porque el certificado no es de confianza:

$ curl https://somehost.internal-FQDN/

curl: (60) SSL certificate problem: self-signed certificate in certificate chain 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.

Cierta documentación fomenta una conexión insegura simple para estos sitios internos y de confianza. Curl puede conectarse de forma insegura con -k opción:

$ curl -k https://somehost.internal-FQDN/

O, si verifiqué y descargué mi certificado CA interno, puedo decirle a curl para verificar el sitio con ese certificado:

$ curl --cacert /path/to/cert-file https://somehost.internal-FQDN/

Otros programas son similares. Con la herramienta OpenShift y Origin para gestionar aplicaciones (oc ), es posible que una conexión a un clúster instalado de forma predeterminada no reconozca el certificado de CA autofirmado generado que el clúster usa para firmar otros certificados internos. Este problema incluye una conexión a CodeReady Containers:

$ oc login -u developer -p developer https://api.crc.testing:6443

The server uses a certificate signed by an unknown authority.

You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n):

Si tiene una copia de los certificados, especifique el certificado del cliente con --client-certificate="" opción, o el certificado CA con el --certificate-authority="" opción, cuando se utiliza el oc comando.

Servidor Satélite Red Hat y la herramienta CLI hammer funcionan de manera similar, pero el certificado de CA se puede especificar en la línea de comando o en el ~/.hammer/cli_config.yml expediente. El hammer El comando también tiene una opción para importar el certificado Satellite CA directamente en el .hammer del usuario. directorio de configuración:

$ hammer --fetch-ca-cert https://satellite.example.com

CA certificate for https://satellite.example.com was stored to 

..output omitted...

Este comando solo hace que el certificado esté disponible para un solo usuario y tendría que repetirse para cada usuario del sistema. Para que el certificado esté disponible para todos los usuarios en un sistema, la salida del comando hammer incluso sugiere usar ca-certificates .

Actualizar ca-certificates para validar sitios con un certificado CA interno

En lugar de especificar manualmente el certificado de CA con cada comando, podemos agregar nuestros certificados de CA internos a la confianza de CA proporcionada por ca-certificates paquete. Este paquete proporciona una estructura de directorios en /etc/pki/ para administrar los certificados y un comando update-ca-trust para administrar la "configuración consolidada y dinámica de los certificados de CA y la confianza asociada:"

$ ls /etc/pki/ca-trust/ 
ca-legacy.conf extracted README source

$ ls /etc/pki/ca-trust/source 
anchors blacklist ca-bundle.legacy.crt README 

Para agregar un certificado, descárguelo, colóquelo en /etc/pki/ca-trust/source/anchors y luego ejecute el comando update-ca-trust . Necesitarás ser root para estas dos tareas:

$ sudo curl http://satellite.example.com/pub/katello-server-ca.crt -o /etc/pki/ca-trust/source/anchors/satellite-ca.crt
$ sudo update-ca-trust

Una vez que se emite el comando de actualización, el certificado está disponible a través de /etc/pki/ca-trust/extracted árbol:

$ ls /etc/pki/ca-trust/extracted 
edk2 java openssl pem README

Las aplicaciones que consultan este directorio para verificar los certificados pueden utilizar cualquiera de los formatos proporcionados. El comando de actualización maneja las copias, las conversiones y la consolidación para los diferentes formatos. La página man para update-ca-trust tiene más información sobre la estructura del directorio, los formatos y las formas en que se accede a los certificados, pero una forma rápida de enumerar todos los sujetos del certificado en el paquete es con el siguiente awk y openssl comandos:

$ awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Ahora que agregué el certificado de CA para mi servidor satélite, puedo usar curl sin ninguna opción de certificado adicional para acceder a la API:

$ curl --request GET --user admin https://satellite.example.com/katello/api/organizations 

Enter host password for user 'admin': 

{ "total": 1, "subtotal": 1,

...output omitted...

Lo mismo es cierto para oc comandos, hammer comandos y muchas otras aplicaciones de línea de comandos. Estas utilidades pueden usar los certificados administrados por ca-trust para validar sus conexiones.

[¿Quiere obtener más información sobre seguridad? Consulte la lista de verificación de cumplimiento y seguridad de TI.]


Linux
  1. Historial de línea de comandos en Linux

  2. Microsoft Teams ya está disponible en Linux

  3. Editores de texto de línea de comandos en Linux

  4. Listar todos los certificados ssl ca disponibles

  5. Ubicación del certificado SSL en UNIX/Linux

Cómo instalar herramientas de desarrollo en Linux

Herramientas de Linux:du vs df

Guía para instalar VMware Tools en Linux

Linux – Diagrama de Linux Kernel vs. Herramientas de rendimiento?

Las 10 mejores distribuciones de Linux

Las 10 mejores herramientas de lectura rápida de Linux disponibles ahora mismo