Comment ajouter une autorité de certification à Ubuntu?

166

Mon travail a décidé de créer sa propre autorité de certification (CA) pour gérer différents aspects de notre travail en toute sécurité, sans avoir à payer pour des certificats.

  • Signer de manière cryptographique des emails
  • Crypter le contenu des emails
  • Créez un accès à des éléments tels que le certificat de client IRC de la société .
  • Révoquer automatiquement les clés des anciens employés

Ils m'ont envoyé un .pemfichier et je ne sais pas comment l'ajouter à mon installation Ubuntu. Les instructions envoyées étaient les suivantes: "Double-cliquez dessus sur un Mac pour l’installer." 

Comment je procède? Ai-je besoin de faire quelque chose avec OpenSSL pour créer un .key, .csrou .crtfichier?

Xeoncross
la source
2
le commentaire "Les instructions envoyées étaient: \" Double-cliquez dessus sur un Mac pour pouvoir l'installer. "" ma journée
Mzoll

Réponses:

231

Installer une autorité de certification

Copiez votre certificat au format PEM (le format qu’il contient ----BEGIN CERTIFICATE----) /usr/local/share/ca-certificateset nommez-le avec une .crtextension de fichier.

Alors courez sudo update-ca-certificates.

Mises en garde: cette installation concerne uniquement les produits qui utilisent ce magasin de certificats. Certains produits peuvent utiliser d'autres magasins de certificats; Si vous utilisez ces produits, vous devez également ajouter ce certificat de CA à ces autres magasins de certificats. ( Instructions Firefox , Instructions Chrome , Instructions Java )

Tester le CA

Vous pouvez vérifier si cela a fonctionné en recherchant le certificat que vous venez d'ajouter /etc/ssl/certs/ca-certificates.crt(liste longue de tous les certificats concaténés de votre autorité de certification approuvée).

Vous pouvez également utiliser le client s_client d'OpenSSL en essayant de vous connecter à un serveur dont vous savez qu'il utilise un certificat signé par l'autorité de certification que vous venez d'installer.

$ 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)

La première chose à rechercher est la chaîne de certificats située en haut de la sortie. Cela devrait indiquer que l'autorité de certification est l'émetteur (à côté de i:). Cela vous indique que le serveur présente un certificat signé par l'autorité de certification que vous installez.

Deuxièmement, recherchez-le verify return codeà la fin 0 (ok).

Mark E. Haase
la source
3
celui-ci fonctionne réellement
Sabareesh Kkanan
1
Merci de noter que Firefox / Chrome n’utilise pas le magasin de certificats par défaut.
Tim Strijdhorst
4
Notez que les certificats update-ca peuvent être très pointilleux (probablement de par leur conception). mycert.pem.crt n'a PAS fonctionné, mais mycert.crt l'a fait. Je pense également que cela doit être / usr / local / share / ca-certificats, pas / usr / share / ca-certificats (malgré les commentaires formulés dans le fichier /etc/ca-certificates.conf).
labyrinthe
2
Merci pour le crtcommentaire d'extension, c'était le secret pour obtenir ce travail pour moi, on m'a donné un certificat avec une certextension et je ne comprenais pas pourquoi rien ne fonctionnait.
Ransom Briggs
3
Une mise en garde: s_clientn'envoie pas SNI par défaut et le serveur peut avoir besoin de SNI, surtout s'il prend en charge des hôtes / sites virtuels avec différents certificats. pour ce cas ajouter -servername foo.whatever.com. Ou si c'est un serveur web utiliser (versions modernes de) curlou wgetqui font SNI automatiquement.
dave_thompson_085
66

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

D'après ce qui précède, je déduirais que le moyen privilégié pour importer des fichiers de certificat locaux dans le magasin approuvé est de les placer /usr/local/share/ca-certificates, puis de les exécuter update-ca-certificates. Vous n'avez pas besoin de toucher /etc/ssl/certsdirectement.

Steven Monday
la source
23
Nommer les certificats avec les extensions .crt semblait également nécessaire.
Traitez bien vos mods
Merci pour la note @phyzome - n'aurait pas pu ajouter mon certificat autrement.
Seiyria
1
Je devais ajouter --freshpour le faire fonctionner. par exempleupdate-ca-certificates --fresh
Elijah Lynn
15

J'ai eu le même problème, et j'ai dû copier le .pemfichier en le /usr/local/share/ca-certificatesrenommant .crt. Le .cerfichier peut facilement être converti en .pem, avec openssl, par exemple, si vous n'avez pas le fichier .pem.

Après avoir copié le fichier, vous devez l'exécuter sudo update-ca-certificates.

greuze
la source
openssl x509 -inform DER -in certificate.cer -out certificate.crt
Webwurst
14

Les autres réponses concernant update-ca-certificatessont correctes pour les applications lues à partir du magasin de certificats du système. Pour Chrome et Firefox, et probablement d’autres, le certificat doit être placé dans nssdb, le backend de la bibliothèque Mozilla NSS.

À partir de https://code.google.com/p/chromium/wiki/LinuxCertManagement :

Par exemple, pour faire confiance à un certificat de CA racine pour l’émission de certificats de serveur SSL, utilisez

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <pseudonyme du certificat> -i <nom du fichier du certificat>

<certificate nickname>est arbitraire et <certificate filename>constitue votre fichier .pem ou .crt.

Autres références utiles:

Johann
la source
Merci. Cela fonctionne sur Ubuntu 16.04 pour Chrome 53.0.2785.143, mais Firefox 49 semble avoir une base de données de magasin distincte et doit être ajouté depuis environ: preferences # advanced [Afficher les certificats] -> [Autorités] -> [Importer] Plus à propos de firefox cert store. askubuntu.com/a/248326/535154
mauron85
Soit dit en passant, si vous souhaitez installer cert avant la première exécution de Chrome (c.-à-d. Tant que .pki / dir est toujours manquant), vous devez d'abord créer le nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel
Il est possible d’obtenir que Chrome et Firefox lisent à partir du magasin de certificats du système. Voir ma réponse: superuser.com/a/1312419/506107
Wheeler
11

Pour les nouvelles versions basées sur Debian, vous devrez peut-être exécuter:

sudo dpkg-reconfigure ca-certificates

REMARQUE: sudo dpkg-reconfigure appelle ca-certificats en interne update-ca-certificates

Bien sûr, vous devrez toujours copier le certificat (fichier .crt) dans / usr / share / ca-certificates avant de faire ceci :)

missmah
la source
4

En vous appuyant sur la réponse de dwmw2 , vous pouvez indiquer aux applications utilisant NSS pour la gestion de ses certificats d'utiliser le magasin de données de confiance du système.

libnss3par défaut, il est livré avec un ensemble en lecture seule de certificats d'autorité de certification racine ( libnssckbi.so). Par conséquent, vous devez généralement les ajouter manuellement vous-même au magasin d'approbation d'utilisateurs local situé dans $HOME/.pki/nssdb. p11-kitoffre une solution de remplacement immédiate libnssckbi.soqui agit comme un adaptateur pour les certificats racine installés à l’échelle du système /etc/ssl/certs.

Modifier:

Il semble y avoir plus de versions de libnssckbi.sodehors que juste dans libnss3. Ce qui suit est un script pour les trouver tous, les sauvegarder et les remplacer par des liens vers 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

Instructions d'origine:

Pour ce faire, installez p11-kitet libnss3(s'ils ne sont pas déjà installés):

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

Puis sauvegardez l'existant libnssckbi.sofourni par libnss3:

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

Enfin, créez le lien symbolique:

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

Pour confirmer que cela fonctionne, vous pouvez exécuter ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soet il devrait montrer le lien:

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

Désormais, si vous ajoutez un certificat au magasin update-ca-certificatesd'autorisations à l'aide de , ces certificats seront désormais disponibles pour les applications utilisant NSS ( libnss3), telles que Chrome.

wheeler
la source
1

Comme indiqué précédemment, diverses applications utilisant NSS ont leur propre magasin de certificats. À l'heure actuelle, vous devez utiliser manuellement Ubuntu certutilpour ajouter vos autorités de certification à chaque application, pour chaque utilisateur.

Dans d'autres distributions telles que Fedora, ce genre de choses fonctionne avec Just Works ™ et vous devriez créer un bogue contre toutes les applications qui n'approuvent pas automatiquement les autorités de certification avec lesquelles vous installez update-ca-trust.

Vous pouvez résoudre ce problème dans Ubuntu aussi en installant le p11-kit-modulespackage, puis remplacer le NSS racines de confiance intégrées module avec p11-kit-trust.so, en faisant un lien symbolique par exemple de /usr/lib/firefox/libnssckbi.sola/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Ensuite , vous aurez obtenir les racines de confiance configurées, et non pas quelques ones codées en dur du système. Notez qu'Ubuntu fournit plusieurs copies différentes de cette bibliothèque libnssckbi.so avec les racines de confiance codées en dur, et vous devez toutes les remplacer!

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

dwmw2
la source
Quand je l'ai fait sudo find / -type f -name "libnssckbi.so", il a trouvé libnssckbi.soen trois endroits: /usr/lib/thunderbird/, /usr/lib/firefox/et /usr/lib/x86_64-linux-gnu/nss/. Donc, vous dites que je devrais relier le libnssckbi.sodans ces trois dossiers p11-kit-trust.so?
Roues
1
Ok, je viens de confirmer que la liaison /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sofonctionnait comme un CHARM. J'ai pu ajouter un certificat dans /usr/local/share/ca-certificates, exécuter sudo update-ca-certificateset PRESTO. Chrome a commencé à accepter les certificats auto-signés.
Wheeler
0

Sérieusement stupide réponse à ajouter ici, mais j'avais passé 2 heures à faire des allers-retours avec certutils sous Linux ... J'étais sûre que tout était correct:

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,, 

Mais encore, en chrome rien ne fonctionnait. J'ai tout essayé, finalement ...

Restarting Chrome

Était la clé de mon succès après avoir suivi: le conseil de Steven Monday

Jamie Hutber
la source