Agregar un certificado autofirmado a la "lista de confianza"

88

He generado un certificado autofirmado para mi servidor de compilación y me gustaría confiar globalmente en el certificado de mi máquina, ya que creé la clave yo mismo y estoy harto de ver advertencias.

Estoy en Ubuntu 12.04. ¿Cómo puedo tomar el certificado y confiar globalmente para que los navegadores (Google Chrome), las utilidades CLI (wget, curl) y los lenguajes de programación (Python, Java, etc.) confíen en la conexión a https://mysite.com sin preguntar? preguntas?

Naftuli Kay
fuente
Todo el TLS debe ser vectorizado a través de OpenSSL, por lo que ese es el lugar para buscar documentación. En este caso: gagravarr.org/writing/openssl-certs/… parece útil.
msw

Respuestas:

88

La respuesta simple a esto es que casi cada aplicación lo manejará de manera diferente.

Además, OpenSSL y GNUTLS (las bibliotecas de procesamiento de certificados más utilizadas para manejar certificados firmados) se comportan de manera diferente en el tratamiento de los certificados, lo que también complica el problema. Además, los sistemas operativos utilizan diferentes mecanismos para utilizar la "CA raíz" utilizada por la mayoría de los sitios web.

Aparte de eso, dando a Debian como ejemplo. Instala el ca-certificatespaquete:

apt-get install ca-certificates

Luego copia la mitad pública de su certificado de CA no confiable (el que usa para firmar su CSR) en el directorio del certificado de CA (como raíz):

cp cacert.pem /usr/share/ca-certificates

Y consiga que reconstruya el directorio con su certificado incluido, ejecútelo como root:

dpkg-reconfigure ca-certificates

y seleccione la askopción, desplácese hasta su certificado, márquelo para incluirlo y seleccione ok.

La mayoría de los navegadores usan su propia base de datos de CA, por lo que certutilse deben usar herramientas como para modificar su contenido (en Debian que proporciona el libnss3-toolspaquete). Por ejemplo, con Chrome ejecutas algo en la línea de:

certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "My Homemade CA" -i /path/to/CA/cert.file

Firefox le permitirá buscar el certificado en el disco, reconocerlo como un archivo de certificado y luego le permitirá importarlo a la lista de CA raíz.

La mayoría de los otros comandos, como los curlinterruptores de línea de comando take, puede usar para apuntar a su CA,

 curl --cacert  /path/to/CA/cert.file https://...

o descartar la validación SSL por completo

 curl --insecure https://...

El resto necesitará una investigación individual si el ca-certificatestruco similar no lo ordena para esa aplicación en particular.

Drav Sloan
fuente
Además, como se señaló aquí , agregar certificados de CA para Java es también una cuestión aparte.
Naftuli Kay
2
Después de copiar el certificado a / usr / share / ca-certificados, no puedo verlo en la dpkg-reconfigure ca-certificateslista. ¿Qué estoy haciendo mal?
Georges Dupéron
19
@ GeorgesDupéron Eso me pasó a mí. Lo resolví renombrando el certificado de whatever.pema whatever.crt.
Hola Mundo
2
FYI, tenía un archivo cert llamado .cer, y eso no funcionó. Tuve que cambiarle el nombre .crtpara que fuera reconocido.
Tri Nguyen
54

Enfoque no interactivo

Para usar en un contexto no interactivo (por ejemplo, una receta de chef) puede usar la siguiente secuencia.

sudo cp my.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
  • Probado y funciona en Debian 5/6 y Ubuntu 14.04.
  • Para más información, ver man update-ca-certificates

Este método es preferido sobre el método de @ Drav, ya /usr/share/que generalmente está reservado para los archivos agregados por el OS / apt-get.

oDDsKooL
fuente
44
Es mejor copiar los archivos /usr/local/share/ca-certificates/como se menciona en las páginas del
manual
3
Para su información, la A debe ser una .crt, encontré .certafirmada que se agregó pero no ayudó
KCD
6

En Fedora 23, agregue el archivo .pem o .der /etc/pki/ca-trust/source/anchors/y ejecútelo sudo update-ca-trust extract.

Consulte los man update-ca-trustdetalles, por ejemplo, si debe usar / etc o / usr.

user7610
fuente
4

En centos:

cp *.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
libélula
fuente
Cuando lo haga openssl connect, ¿ debería especificar esta carpeta / anchors? Todavía recibo un error "self signed certs
Janac Meena
2

Enfoque no interactivo (18 de octubre)
para sistemas basados ​​en Debian recientes

Hay una distinción entre agregar un certificado a la tienda del host y activarlo para que las aplicaciones realmente los utilicen. No se usa necesariamente un certificado existente en la tienda (aunque tengo que admitir que todavía muchos paquetes se están equivocando de todos modos)
Esto puede ser confuso cuando configura un paquete que considera /etc/ca-certificate.confy simplemente se niega a usar su certificado, aunque tiene agregado sin error. Debe indicar update-ca-certificatesexplícitamente (no solo copiar sino) activar el certificado agregándolo a /etc/ca-certificate.confo /etc/ca-certificate/update.d.

CERT=mycert.crt
cp /mypath/to/$CERT /usr/share/ca-certificates/$CERT
    # notice the + sign which tells to activate the cert!!!
echo "+$CERT" >/etc/ca-certificates/update.d/activate_my_cert
dpkg-reconfigure ca-certificates;

Ahora aquí se vuelve confuso ya que hay una manera implícita de confiar en un certificado utilizando una ruta diferente:

CERT=mycert.crt
cp /mypath/to/$CERT /usr/local/share/ca-certificates/$CERT
update-ca-certificates;
3ronco
fuente