¿Cómo se agrega una autoridad de certificación (CA) a Ubuntu?

166

Mi trabajo ha decidido emitir su propia autoridad de certificación (CA) para manejar diferentes aspectos de nuestro trabajo de forma segura sin pagar por los certificados.

  • Firmar criptográficamente correos electrónicos
  • Cifrar contenidos de correo electrónico
  • Acceda a cosas como la empresa basada en el certificado de cliente IRC .
  • Revocar automáticamente las claves de ex empleados

Me enviaron un .pemarchivo y no estoy seguro de cómo agregarlo a mi instalación de Ubuntu. Las instrucciones enviadas fueron: "Hacer doble clic en una Mac debería instalarlo". 

¿Cómo procedo? ¿Necesito hacer algo con OpenSSL para crear una .key, .csro .crtpresentar?

Xeoncross
fuente
2
el comentario "Las instrucciones enviadas fueron: \"
Hacer

Respuestas:

231

Instalar una CA

Copie su certificado en formato PEM (el formato que tiene ----BEGIN CERTIFICATE----) /usr/local/share/ca-certificatesy nómbrelo con una .crtextensión de archivo.

Entonces corre sudo update-ca-certificates.

Advertencias: esta instalación solo afecta a los productos que utilizan este almacén de certificados. Algunos productos pueden usar otras tiendas de certificados; si usa esos productos, también deberá agregar este certificado de CA a esos otros almacenes de certificados. ( Instrucciones de Firefox , Instrucciones de Chrome , Instrucciones de Java )

Prueba de CA

Puede verificar si esto funcionó buscando el certificado que acaba de agregar /etc/ssl/certs/ca-certificates.crt(que es solo una larga lista de todas las CA de confianza concatenadas juntas).

También puede usar s_client de OpenSSL intentando conectarse a un servidor que sabe que está usando un certificado firmado por la CA que acaba de instalar.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = [email protected]
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/[email protected]

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Lo primero que debe buscar es la cadena de certificados cerca de la parte superior de la salida. Esto debería mostrar la CA como el emisor (al lado de i:). Esto le indica que el servidor presenta un certificado firmado por la CA que está instalando.

En segundo lugar, busque verify return codeal final para establecer 0 (ok).

Mark E. Haase
fuente
3
este realmente funciona
Sabareesh Kkanan
1
Gracias por señalar que firefox / chrome no utiliza la tienda de certificados predeterminada.
Tim Strijdhorst
44
Tenga en cuenta que los certificados de actualización de ca pueden ser muy delicados (probablemente por diseño). mycert.pem.crt NO funcionó, pero mycert.crt sí. También creo que debe ser / usr / local / share / ca-certificados, no / usr / share / ca-certificados (a pesar de lo que dicen los comentarios en /etc/ca-certificates.conf).
laberinto
2
Gracias por el crtcomentario de la extensión, ese fue el secreto para conseguir este trabajo para mí, me dieron un certificado con una certextensión y estaba confundido sobre por qué nada funcionaba.
Ransom Briggs
3
Una advertencia: s_clientno envía SNI de forma predeterminada y el servidor puede necesitar SNI, especialmente si admite hosts / sitios virtuales con diferentes certificados; para este caso agregar -servername foo.whatever.com. O si se trata de un uso del servidor web (versiones modernas de) curlo de wgetSNI automáticamente.
dave_thompson_085
66

man update-ca-certificados :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

De lo anterior, deduciría que la forma preferida de obtener archivos de certificados locales en el almacén de confianza es colocarlos /usr/local/share/ca-certificatesy luego ejecutarlos update-ca-certificates. No necesita tocar /etc/ssl/certsdirectamente.

Steven Monday
fuente
23
También se requería nombrar los certificados con extensiones .crt.
trata bien tus modificaciones el
Gracias por la nota @phyzome, de lo contrario no habría podido agregar mi certificado.
Seiyria
1
Tuve que agregar --freshpara que funcione. egupdate-ca-certificates --fresh
Elijah Lynn
15

Tuve el mismo problema y tuve que copiar el .pemarchivo /usr/local/share/ca-certificates, renombrándolo como .crt. El .cerarchivo se puede convertir fácilmente .pem, con openssl, por ejemplo, si no tiene el .pem.

Después de copiar el archivo debe ejecutarlo sudo update-ca-certificates.

greuze
fuente
openssl x509 -inform DER -in certificate.cer -out certificate.crt
webwurst
14

Las otras respuestas relacionadas update-ca-certificatesson correctas para las aplicaciones que leen del almacén de certificados del sistema. Para Chrome y Firefox, y probablemente algunos otros, el certificado debe colocarse en el nssdb, el back-end de la biblioteca NSS de Mozilla.

Desde https://code.google.com/p/chromium/wiki/LinuxCertManagement :

Por ejemplo, para confiar en un certificado de CA raíz para emitir certificados de servidor SSL, use

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <apodo del certificado> -i <nombre del archivo del certificado>

Donde <certificate nickname>es arbitrario, y <certificate filename>es su archivo .pem o .crt.

Otras referencias útiles:

Johann
fuente
Gracias. Funciona en Ubuntu 16.04 para Chrome 53.0.2785.143, pero Firefox 49 parece tener una base de datos de tienda separada y debe agregarse desde aproximadamente: preferencias # avanzadas [Ver certificados] -> [Autoridades] -> [Importar] Más sobre la tienda de certificados de Firefox. askubuntu.com/a/248326/535154
mauron85
Por cierto, si desea instalar cert antes de la primera ejecución de Chrome (es decir, mientras falta .pki / dir), primero debe crear el nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel
Hay una manera de hacer que Chrome y Firefox lean desde el almacén de certificados del sistema. Vea mi respuesta: superuser.com/a/1312419/506107
wheeler
11

Para las versiones más recientes basadas en Debian, es posible que deba ejecutar:

sudo dpkg-reconfigure ca-certificates

NOTA: sudo dpkg-reconfigure ca-certificate llama a update-ca-certificados internamente

Por supuesto, aún deberá copiar el certificado (archivo .crt) en / usr / share / ca-certificados antes de hacer algo de esto :)

missmah
fuente
4

Sobre la base de la respuesta de dwmw2 , puede decirle a las aplicaciones que usan NSS para su administración de certificados que usen el almacén de confianza del sistema.

libnss3de forma predeterminada se envía con un conjunto de certificados de CA raíz ( libnssckbi.so) de solo lectura , por lo que la mayoría de las veces debe agregarlos manualmente al almacén de confianza del usuario local ubicado en $HOME/.pki/nssdb. p11-kitofrece un reemplazo directo libnssckbi.soque actúa como un adaptador para los certificados raíz instalados en todo el sistema /etc/ssl/certs.

Editar:

Parece que hay más versiones de libnssckbi.soahí afuera que solo adentro libnss3. El siguiente es un script para encontrarlos a todos, respaldarlos y reemplazarlos con enlaces a p11-kit:

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

Instrucciones originales:

Para hacer esto, instale p11-kity libnss3(si aún no están instalados):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

Luego haga una copia de seguridad de la existente libnssckbi.soproporcionada por libnss3:

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

Finalmente, cree el enlace simbólico:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

Para confirmar que funcionó, puede ejecutar ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soy debería mostrar el enlace:

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Ahora, si agrega un certificado a la tienda de CA usando update-ca-certificates, esos certificados ahora estarán disponibles para aplicaciones que usan NSS ( libnss3) como Chrome.

rodador
fuente
1

Como se señaló, varias aplicaciones que usan NSS tienen su propio almacén de certificados. Tal como están las cosas en Ubuntu, debe usarlo manualmente certutilpara agregar sus CA para cada aplicación, para cada usuario.

En otras distribuciones como Fedora, este tipo de cosas Just Works ™ y usted deben presentar un error contra cualquier aplicación que no confíe automáticamente en las CA con las que instala update-ca-trust.

También puede solucionar esto en Ubuntu instalando el p11-kit-modulespaquete y luego reemplazando el módulo de raíces de confianza incorporado de NSS con p11-kit-trust.so, haciendo un enlace simbólico, por ejemplo, de /usr/lib/firefox/libnssckbi.soa/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

A continuación, va a obtener las raíces de confianza configurado del sistema, no algunos no modificables queridos. Tenga en cuenta que Ubuntu envía varias copias diferentes de esa biblioteca libnssckbi.so con las raíces de confianza codificadas, ¡y debe reemplazarlas todas!

cf. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285

dwmw2
fuente
Cuando lo hice sudo find / -type f -name "libnssckbi.so", se encuentra libnssckbi.soen tres lugares: /usr/lib/thunderbird/, /usr/lib/firefox/, y /usr/lib/x86_64-linux-gnu/nss/. Entonces, ¿estás diciendo que debería vincular las libnssckbi.sotres carpetas a esas p11-kit-trust.so?
Wheeler
1
De acuerdo, acabo de confirmar que la vinculación /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sofuncionó como un CHARM. Pude agregar un certificado /usr/local/share/ca-certificates, ejecutar sudo update-ca-certificatesy PRESTO, Chrome comenzó a aceptar los certificados autofirmados.
Wheeler
0

Respuesta seriamente estúpida para agregar aquí, pero había pasado 2 horas yendo y viniendo con certutils en Linux ... Estaba seguro de que todo estaba correcto:

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

Pero aún así, en cromo nada funcionaba. Intenté todo, al final ...

Restarting Chrome

Fue la clave de mi éxito después de seguir: el consejo de Steven Monday

Jamie Hutber
fuente