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.]