Come si aggiunge un'autorità di certificazione (CA) a Ubuntu?


166

Il mio lavoro ha deciso di emettere la propria autorità di certificazione (CA) per gestire in modo sicuro diversi aspetti del nostro lavoro senza pagare i certificati.

  • Firma crittograficamente le e-mail
  • Crittografa i contenuti della posta elettronica
  • Accedere a cose come la società basata sul certificato client IRC .
  • Revoca automaticamente le chiavi degli ex dipendenti

Mi hanno inviato un .pemfile e non sono sicuro di come aggiungerlo alla mia installazione di Ubuntu. Le istruzioni inviate sono state: "Fare doppio clic su di esso su un Mac per installarlo". 

Come procedo? Ho bisogno di fare qualcosa con OpenSSL per creare una .key, .csro .crtun file?


2
il commento "Le istruzioni inviate erano: \" Fare doppio clic su di esso su un Mac dovrebbe installarlo. \ "" Mi ha reso la giornata
mzoll

Risposte:


231

Installazione di una CA

Copia il tuo certificato in formato PEM (il formato che lo contiene ----BEGIN CERTIFICATE----) /usr/local/share/ca-certificatese chiamalo con .crtun'estensione di file.

Quindi corri sudo update-ca-certificates.

Avvertenze: questa installazione riguarda solo i prodotti che utilizzano questo archivio certificati. Alcuni prodotti possono utilizzare altri negozi di certificati; se si utilizzano tali prodotti, è necessario aggiungere questo certificato CA anche a quegli altri archivi di certificati. ( Istruzioni Firefox , Istruzioni Chrome , Istruzioni Java )

Test della CA

Puoi verificare se ciò ha funzionato cercando il certificato che hai appena aggiunto /etc/ssl/certs/ca-certificates.crt(che è solo un lungo elenco di tutte le CA di fiducia concatenate insieme).

Puoi anche usare s_client di OpenSSL provando a connetterti a un server che sai che sta usando un certificato firmato dalla CA che hai appena installato.

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

La prima cosa da cercare è la catena di certificati nella parte superiore dell'output. Ciò dovrebbe mostrare la CA come emittente (accanto a i:). Questo ti dice che il server presenta un certificato firmato dalla CA che stai installando.

In secondo luogo, cercare verify return codela fine da impostare 0 (ok).


3
questo funziona davvero
Sabareesh Kkanan il

1
Grazie per aver notato che Firefox / Chrome non utilizza l'archivio certificati predefinito.
Tim Strijdhorst,

4
Si noti che i certificati di aggiornamento possono essere molto difficili (probabilmente in base alla progettazione). mycert.pem.crt NON ha funzionato, ma mycert.crt ha funzionato. Penso anche che debba essere / usr / local / share / ca-certificati, non / usr / share / ca-certificati (nonostante quanto detto nei commenti in /etc/ca-certificates.conf).
labirinto,

2
Grazie per il crtcommento sull'estensione, che era il segreto per ottenere questo lavoro per me, mi è stato dato un certificato con certun'estensione ed ero confuso sul perché nulla funzionava.
Ransom Briggs

3
Un avvertimento: s_clientnon invia SNI per impostazione predefinita e il server potrebbe aver bisogno di SNI soprattutto se supporta host / siti virtuali con certificati diversi; per questo caso aggiungere -servername foo.whatever.com. O se si tratta di un uso del server Web (versioni moderne di) curlo wgetche esegue automaticamente SNI.
dave_thompson_085,

66

man update-ca-certificati :

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.

Da quanto sopra, desidero dedurre che il modo preferito per ottenere i file dei certificati locali nell'archivio attendibile è metterli in /usr/local/share/ca-certificates, e quindi eseguire update-ca-certificates. Non è necessario toccare /etc/ssl/certsdirettamente.


23
Sembrava necessario anche nominare i certificati con estensioni .crt.
Tratta bene le tue mod il

Grazie per la nota @phyzome - altrimenti non avrei potuto aggiungere il mio certificato.
Seiyria,

1
Ho dovuto aggiungere --freshper farlo funzionare. ad es.update-ca-certificates --fresh
Elijah Lynn il

15

Ho avuto lo stesso problema e ho dovuto copiare il .pemfile in /usr/local/share/ca-certificates, rinominandolo come .crt. Il .cerfile può essere facilmente convertito in .pem, ad esempio con openssl, se non si dispone di .pem.

Dopo aver copiato il file è necessario eseguire sudo update-ca-certificates.


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

14

Le altre risposte relative update-ca-certificatessono corrette per le applicazioni lette dall'archivio certificati del sistema. Per Chrome e Firefox, e probabilmente alcuni altri, il certificato deve essere inserito in nssdb, il backend per la libreria NSS di Mozilla.

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

Ad esempio, per considerare attendibile un certificato CA radice per l'emissione di certificati server SSL, utilizzare

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <nickname certificato> -i <nome file certificato>

Dove <certificate nickname>è arbitrario ed <certificate filename>è il tuo file .pem o .crt.

Altri riferimenti utili:


Grazie. Funziona su Ubuntu 16.04 per Chrome 53.0.2785.143, ma Firefox 49 sembra avere un archivio separato db e deve essere aggiunto da circa: preferenze # avanzate [Visualizza certificati] -> [Autorità] -> [Importa] Maggiori informazioni su firefox cert store. askubuntu.com/a/248326/535154
mauron85,

A proposito, se vuoi installare cert prima della prima esecuzione di Chrome (ovvero mentre manca ancora .pki / dir), devi prima creare il nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel il

C'è un modo per far leggere Chrome e Firefox dall'archivio certificati del sistema. Vedi la mia risposta: superuser.com/a/1312419/506107
Wheeler

11

Per le build più recenti basate su Debian, potrebbe essere necessario eseguire:

sudo dpkg-reconfigure ca-certificates

NOTA: sudo dpkg-reconfigure ca-certificati chiama update-ca-certificati internamente

Ovviamente dovrai comunque copiare il certificato (file .crt) in / usr / share / ca-certificati prima di eseguire questa operazione :)


4

Sulla base della risposta di dwmw2 , puoi effettivamente dire alle applicazioni che usano NSS per la sua gestione dei certificati di usare l'archivio sicuro del sistema.

libnss3per impostazione predefinita viene fornito con una serie di sola lettura di certificati CA radice ( libnssckbi.so), quindi la maggior parte delle volte è necessario aggiungerli manualmente all'archivio di fiducia dell'utente locale in cui si trova $HOME/.pki/nssdb. p11-kitoffre una sostituzione drop-in libnssckbi.soche funge da adattatore per i certificati root a livello di sistema installati in /etc/ssl/certs.

Modificare:

Sembra che ci siano più versioni di libnssckbi.solà fuori che solo in libnss3. Di seguito è riportato uno script per trovarli tutti, eseguirne il backup e sostituirli con collegamenti 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

Istruzioni originali:

Per fare ciò, installare p11-kite libnss3(se non sono già stati istillati):

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

Quindi eseguire il backup dell'esistente libnssckbi.sofornito da libnss3:

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

Infine, crea il link simbolico:

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

Per confermare che ha funzionato, è possibile eseguire ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soe dovrebbe mostrare il collegamento:

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

Ora, se si aggiunge un certificato all'archivio CA utilizzando update-ca-certificates, tali certificati saranno ora disponibili per le applicazioni che utilizzano NSS ( libnss3) come Chrome.


1

Come notato, varie applicazioni che utilizzano NSS hanno il proprio archivio certificati. Allo stato attuale di Ubuntu, è necessario utilizzare manualmente certutilper aggiungere le CA per ciascuna applicazione, per ciascun utente.

In altre distribuzioni come Fedora, questo genere di cose Just Works ™ e dovresti presentare un bug contro qualsiasi applicazione che non si fida automaticamente delle CA con cui installi update-ca-trust.

È possibile risolvere questo problema anche in Ubuntu installando il p11-kit-modulespacchetto e quindi sostituendo il modulo di trust trust incorporato NSS p11-kit-trust.so, creando un collegamento simbolico ad esempio da /usr/lib/firefox/libnssckbi.soa/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Poi si dovrà ottenere radici di fiducia configurati del sistema, non alcuni tra quelli hard-coded. Nota che Ubuntu distribuisce più copie diverse di quella libreria libnssckbi.so con le radici del trust codificate e devi sostituirle tutte!

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


Quando l'ho fatto sudo find / -type f -name "libnssckbi.so", ha trovato libnssckbi.soin tre punti: /usr/lib/thunderbird/, /usr/lib/firefox/, e /usr/lib/x86_64-linux-gnu/nss/. Quindi stai dicendo che dovrei collegare libnssckbi.sotutte e tre le cartelle p11-kit-trust.so?
Wheeler

1
Ok, ho appena confermato che il collegamento /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> ha /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sofunzionato come un FASCINO. Sono stato in grado di aggiungere un certificato in /usr/local/share/ca-certificates, eseguire sudo update-ca-certificatese PRESTO, Chrome ha iniziato ad accettare i certificati autofirmati.
Wheeler

0

Risposta seriamente stupida da aggiungere qui, ma avevo trascorso 2 ore avanti e indietro con i certificati in Linux ... Ero sicuro che tutto fosse corretto:

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

Tuttavia, in Chrome non funzionava nulla. Ho provato di tutto, alla fine ....

Restarting Chrome

È stata la chiave del mio successo dopo aver seguito: il consiglio di Steven Monday

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.