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


Mi trabajo ha decidido emitir su propio Autoridad certificada (CA) para manejar diferentes aspectos de nuestro trabajo de forma segura sin pagar certificados.

  • Cryptographically firmar correos electrónicos
  • Encriptar los contenidos del correo electrónico
  • Acceda a cosas como la empresa IRC certificado de cliente basado.
  • Revocar las claves de antiguos empleados automáticamente

Ellos me enviaron un .pem archivo, y no estoy seguro de cómo agregarlo a mi instalación de Ubuntu. Las instrucciones enviadas fueron: "Hacer doble clic en Mac debería instalarlo".

¿Cómo procedo? ¿Debo hacer algo con OpenSSL para crear un .key, .csr, o .crt ¿archivo?


133


origen




Respuestas:


Instalando una CA

Copie su certificado en formato PEM (el formato que tiene ----BEGIN CERTIFICATE---- en él) en /usr/local/share/ca-certificates y nombrarlo con un .crt extensión de archivo.

Entonces corre sudo update-ca-certificates.

Advertencias: Esta instalación solo afecta a los productos que usan 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)

Probando la CA

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

También puede usar el s_client de OpenSSL al intentar 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 = admin@whatever.com
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/emailAddress=admin@whatever.com

... 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 a la CA como el emisor (al lado de i:) Esto le indica que el servidor está presentando un certificado firmado por la CA que está instalando.

Segundo, busca el verify return code al final para configurarlo para 0 (ok).


178



este realmente funciona - Sabareesh Kkanan
Gracias por notar que firefox / crome no usa la tienda de certificados predeterminada. - shokora
Tenga en cuenta que update-ca-certificates puede ser muy quisquilloso (probablemente por diseño). mycert.pem.crt NO funcionó, pero mycert.crt sí. También creo que debe ser / usr / local / share / ca-certificates, no / usr / share / ca-certificates (a pesar de los comentarios que se dicen en /etc/ca-certificates.conf). - labyrinth
Gracias por la crt comentario de extensión, ese fue el secreto para hacerme este trabajo, me dieron un certificado con un cert extensión y estaba confundido sobre por qué nada estaba funcionando. - Ransom Briggs
Una advertencia: s_client no envía SNI por defecto y el servidor puede necesitar SNI especialmente si es compatible con hosts / sitios virtuales con diferentes certs; para este caso agrega -servername foo.whatever.com. O si es un web uso del servidor (versiones modernas de) curl o wget que hacen SNI automáticamente - dave_thompson_085


hombre update-ca-certificates:

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, inferiría que la forma preferida de obtener archivos de certificados locales en la tienda de confianza es ponerlos en /usr/local/share/ca-certificates, y luego corre update-ca-certificates. No necesitas tocar /etc/ssl/certs directamente.


56



Nombrar los certificados con extensiones .crt también parecía ser necesario. - phyzome
Gracias por la nota @phyzome: de lo contrario, no hubiera podido agregar mi certificado. - Seiyria


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

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


15



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


Las otras respuestas con respecto update-ca-certificates son correctos para las aplicaciones que leen desde el almacén de certificados del sistema. Para Chrome y Firefox, y probablemente algunos otros, el certificado debe colocarse en el nssdb, el backend para la biblioteca de Mozilla NSS.

De 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 de certificado> -i <nombre de archivo de certificado>

Dónde <certificate nickname> es arbitrario, y <certificate filename> es su archivo .pem o .crt.

Otras referencias útiles:


12



Gracias. Funciona en Ubuntu 16.04 para Chrome 53.0.2785.143, pero Firefox 49 parece tener una tienda de almacenamiento por separado y debe agregarse desde aproximadamente: preferencias # avanzado [Ver Certificados] -> [Autoridades] -> [Importar] Más sobre la tienda de certificados de Firefox. askubuntu.com/a/248326/535154 - mauron85
Por cierto, si quieres instalar el certificado antes de primera ejecución de Chrome (es decir, mientras .pki / dir aún falta), 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 forma de hacer que Chrome y Firefox lean desde el almacén de certificados del sistema. Ver mi respuesta: superuser.com/a/1312419/506107 - wheeler


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

sudo dpkg-reconfigure ca-certificates

NOTA: sudo dpkg-reconfigure ca-certificates llama a update-ca-certificates internamente

Por supuesto, deberá copiar el certificado (archivo .crt) en / usr / share / ca-certificates antes de hacer nada de esto :)


8





Basándose en dwmw2's responder, puede decirles a las aplicaciones que usan NSS para su administración de certificados que utilicen el almacén de confianza del sistema.

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

Editar:

Parece que hay más versiones de libnssckbi.so por ahí que simplemente en libnss3. La siguiente es una secuencia de comandos para encontrarlos a todos, hacer una copia de seguridad de ellos 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, instala p11-kit y libnss3 (si no están ya inscritos):

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

Luego haga una copia de seguridad del existente libnssckbi.so proporcionado por libnss3:

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

Finalmente, crea 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ó, puedes ejecutar ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so y debe 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 CA utilizando update-ca-certificates, esos certificados ahora estarán disponibles para las aplicaciones que usan NSS (libnss3) como Chrome.


1





Como se indicó, varias aplicaciones que usan NSS tienen su propia tienda de certificados. Tal como están las cosas en Ubuntu, tienes que usar manualmente certutil para agregar sus CA para cada aplicación, para cada usuario.

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

También puedes arreglar esto en Ubuntu instalando el p11-kit-modules paquete y luego reemplazar el NSS raíces de confianza incorporadas módulo con p11-kit-trust.so, haciendo un enlace simbólico, por ejemplo, de /usr/lib/firefox/libnssckbi.so a /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Entonces tú será obtener las raíces de confianza configuradas del sistema, no algunas de las codificadas. Tenga en cuenta que Ubuntu envía múltiples diferente copias de esa biblioteca libnssckbi.so con las raíces de confianza codificadas, ¡y tiene que reemplazarlas todas!

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


1



Cuando lo hice sudo find / -type f -name "libnssckbi.so", Encontró libnssckbi.so en tres lugares: /usr/lib/thunderbird/, /usr/lib/firefox/y /usr/lib/x86_64-linux-gnu/nss/. Entonces estás diciendo que debería vincular el libnssckbi.so en las tres de esas carpetas para p11-kit-trust.so? - wheeler
De acuerdo, acaba 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.so trabajado como un encanto. Pude agregar un certificado en /usr/local/share/ca-certificates, correr sudo update-ca-certificatesy PRESTO, Chrome comenzó a aceptar los certificados autofirmados. - wheeler