Jak dodać urząd certyfikacji (CA) do Ubuntu?

166

Moja praca postanowiła wydać własny urząd certyfikacji (CA), aby bezpiecznie obsługiwać różne aspekty naszej pracy bez płacenia za certyfikaty.

  • Podpisz kryptograficznie wiadomości e-mail
  • Szyfruj treść wiadomości e-mail
  • Uzyskaj dostęp do takich rzeczy jak firmowy certyfikat klienta IRC .
  • Automatyczne wycofywanie kluczy byłych pracowników

Wysłali mi .pemplik i nie jestem pewien, jak dodać go do mojej instalacji Ubuntu. Wysłano instrukcje: „Dwukrotne kliknięcie na komputerze Mac powinno go zainstalować”. 

Jak postępować? Czy muszę coś zrobić z OpenSSL Aby utworzyć .key, .csrlub .crtpliku?

Xeoncross
źródło
1
komentarz „
Wysłane

Odpowiedzi:

231

Instalowanie urzędu certyfikacji

Skopiuj certyfikat w formacie PEM (format, który go zawiera ----BEGIN CERTIFICATE----) /usr/local/share/ca-certificatesi nazwij go .crtrozszerzeniem pliku.

Potem biegnij sudo update-ca-certificates.

Ostrzeżenia: Ta instalacja dotyczy tylko produktów korzystających z tego magazynu certyfikatów. Niektóre produkty mogą korzystać z innych magazynów certyfikatów; jeśli korzystasz z tych produktów, musisz również dodać ten certyfikat CA do innych magazynów certyfikatów. ( Instrukcje Firefox , Instrukcje Chrome , Instrukcje Java )

Testowanie urzędu certyfikacji

Możesz sprawdzić, czy to zadziałało, szukając właśnie dodanego certyfikatu /etc/ssl/certs/ca-certificates.crt(który jest tylko długą listą wszystkich zaufanych urzędów certyfikacji połączonych razem).

Możesz także użyć s_client OpenSSL, próbując połączyć się z serwerem, o którym wiesz, że używa certyfikatu podpisanego przez urząd certyfikacji, który właśnie zainstalowałeś.

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

Pierwszą rzeczą, której należy szukać, jest łańcuch certyfikatów u góry wyniku. Powinno to pokazywać CA jako wystawcę (obok i:). Oznacza to, że serwer przedstawia certyfikat podpisany przez instalowany urząd certyfikacji.

Po drugie, poszukaj verify return codekońca, który ma być ustawiony na 0 (ok).

Mark E. Haase
źródło
3
ten faktycznie działa
Sabareesh Kkanan
1
Dziękujemy za uwagę, że Firefox / Chrome nie używają domyślnego magazynu certyfikatów.
Tim Strijdhorst,
4
Zauważ, że update-ca-certyfikaty mogą być bardzo wybredne (prawdopodobnie z założenia). mycert.pem.crt NIE działało, ale mycert.crt działało. Myślę też, że musi to być / usr / local / share / ca-certyfikaty, a nie / usr / share / ca-certyfikaty (pomimo tego, co napisano w /etc/ca-certificates.conf).
labirynt
2
Dzięki za crtkomentarz do rozszerzenia, który był dla mnie sekretem otrzymania tej pracy, dostałem certyfikat z certrozszerzeniem i byłem zdezorientowany, dlaczego nic nie działa.
Ransom Briggs
3
Jedno zastrzeżenie: s_clientdomyślnie nie wysyła SNI, a serwer może potrzebować SNI, szczególnie jeśli obsługuje wirtualne hosty / witryny z różnymi certyfikatami; w tym przypadku dodaj -servername foo.whatever.com. Lub jeśli jest to serwer sieciowy (nowoczesne wersje) curllub wgetktóre wykonują SNI automatycznie.
dave_thompson_085
65

man update-ca-certyfikaty :

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.

Z powyższego wywnioskowałbym, że preferowanym sposobem na uzyskanie lokalnych plików certyfikatów do zaufanego sklepu jest ich włożenie /usr/local/share/ca-certificates, a następnie uruchomienie update-ca-certificates. Nie musisz dotykać /etc/ssl/certsbezpośrednio.

Steven Monday
źródło
23
Wymagane było również nazywanie certyfikatów rozszerzeniami .crt.
phyzome
Dzięki za notatkę @ phyzome - inaczej nie byłbym w stanie dodać mojego certyfikatu.
Seiyria,
Musiałem dodać, --freshżeby to zadziałało. np.update-ca-certificates --fresh
Elijah Lynn
15

Miałem ten sam problem i musiałem skopiować .pemplik /usr/local/share/ca-certificates, zmieniając jego nazwę na .crt. .cerPlik można łatwo przekształca się .pemz OpenSSL, na przykład, jeśli nie masz .pem.

Po skopiowaniu pliku należy go wykonać sudo update-ca-certificates.

greuze
źródło
openssl x509 -inform DER -in certificate.cer -out certificate.crt
webwurst
14

Pozostałe odpowiedzi dotyczące update-ca-certificatessą poprawne dla aplikacji, które czytają z systemowego magazynu certyfikatów. W przypadku Chrome i Firefoksa i prawdopodobnie niektórych innych certyfikat musi być umieszczony w nssdb, wewnętrznej bazie biblioteki Mozilla NSS.

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

Na przykład, aby zaufać certyfikatowi głównego urzędu certyfikacji w zakresie wystawiania certyfikatów serwera SSL, użyj

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <pseudonim certyfikatu> -i <nazwa pliku certyfikatu>

Gdzie <certificate nickname>jest dowolny i <certificate filename>jest twoim plikiem .pem lub .crt.

Inne pomocne referencje:

Johann
źródło
dzięki. Działa na Ubuntu 16.04 dla Chrome 53.0.2785.143, ale Firefox 49 wydaje się mieć oddzielną bazę danych sklepu i musi zostać dodany z około: preferencje # zaawansowane [Wyświetl certyfikaty] -> [Organy] -> [Import] Więcej o sklepie z certyfikatami Firefox. askubuntu.com/a/248326/535154
mauron85
Nawiasem mówiąc, jeśli chcesz zainstalować cert przed pierwszym uruchomieniem Chrome (tj. Gdy brakuje jeszcze pliku .pki / dir), musisz najpierw utworzyć nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel
Istnieje sposób, aby Chrome i Firefox czytały z systemowego magazynu certyfikatów. Zobacz moją odpowiedź: superuser.com/a/1312419/506107
kołodziej
11

W przypadku nowszych wersji opartych na Debianie może być konieczne uruchomienie:

sudo dpkg-reconfigure ca-certificates

UWAGA: sudo dpkg-rekonfiguruj ca-certyfikaty wywołuje wewnętrznie update-ca-certyfikaty

Oczywiście nadal będziesz musiał skopiować certyfikat (plik .crt) do / usr / share / ca-certyfikaty, zanim cokolwiek z tego zrobisz :)

missmah
źródło
3

Opierając się na odpowiedzi dwmw2 , możesz właściwie powiedzieć aplikacjom, które używają NSS do zarządzania certyfikatami, aby korzystały z systemowego magazynu zaufania.

libnss3domyślnie jest dostarczany z zestawem certyfikatów głównego urzędu certyfikacji ( libnssckbi.so) tylko do odczytu , więc przez większość czasu musisz ręcznie dodać je samodzielnie do lokalnego magazynu zaufania użytkowników znajdującego się w $HOME/.pki/nssdb. p11-kitoferuje zastępczą wymianę, libnssckbi.soktóra działa jak adapter do zainstalowanych w systemie certyfikatów głównych /etc/ssl/certs.

Edytować:

Wydaje się, że jest więcej wersji libnssckbi.soniż tylko w libnss3. Poniżej znajduje się skrypt, aby je wszystkie znaleźć, wykonać kopię zapasową i zastąpić je linkami do 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

Oryginalne instrukcje:

Aby to zrobić, zainstaluj p11-kiti libnss3(jeśli nie są jeszcze zainstalowane):

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

Następnie wykonaj kopię zapasową istniejącego libnssckbi.sodostarczonego przez libnss3:

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

Na koniec utwórz link symboliczny:

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

Aby potwierdzić, że zadziałało, możesz uruchomić ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soi powinien wyświetlić link:

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

Teraz, jeśli dodasz certyfikat do magazynu CA przy użyciu update-ca-certificates, te certyfikaty będą teraz dostępne dla aplikacji korzystających z NSS ( libnss3), takich jak Chrome.

kołodziej
źródło
1

Jak wspomniano, różne aplikacje korzystające z NSS mają własną bazę certyfikatów. W przypadku Ubuntu musisz ręcznie użyć, certutilaby dodać swoje urzędy certyfikacji dla każdej aplikacji i dla każdego użytkownika.

W innych dystrybucjach, takich jak Fedora, ten rodzaj Just Works ™ i powinieneś zgłosić błąd w stosunku do aplikacji, które nie ufają automatycznie zainstalowanym urzędom certyfikacji update-ca-trust.

Możesz to naprawić również w Ubuntu, instalując p11-kit-modulespakiet, a następnie zastępując wbudowany moduł zaufanych korzeni NSS p11-kit-trust.so, tworząc symboliczne łącze na przykład od /usr/lib/firefox/libnssckbi.sodo/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Wtedy będzie uzyskać skonfigurowanych korzenie zaufanie do systemu, a nie jakieś zakodowane nich. Zauważ, że Ubuntu dostarcza wiele różnych kopii tej biblioteki libnssckbi.so z zakodowanymi źródłami zaufania i musisz je wszystkie wymienić!

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

dwmw2
źródło
Kiedy zrobiłem sudo find / -type f -name "libnssckbi.so", Okaże się libnssckbi.sow trzech miejscach: /usr/lib/thunderbird/, /usr/lib/firefox/, i /usr/lib/x86_64-linux-gnu/nss/. Więc mówisz, że powinienem połączyć libnssckbi.sowszystkie trzy z tych folderów p11-kit-trust.so?
kołodziej
1
OK, właśnie potwierdziłem, że linkowanie /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sodziałało jak CHARM. Byłem w stanie dodać certyfikat do /usr/local/share/ca-certificates, uruchomić sudo update-ca-certificatesi PRESTO, Chrome zaczął akceptować certyfikaty z podpisem własnym.
kołodziej
0

Poważnie głupia odpowiedź do dodania tutaj, ale spędziłem 2 godziny chodząc tam iz powrotem z certutils w systemie Linux ... Byłem pewien, że wszystko jest w porządku:

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

Ale w chromie nic nie działało. Ostatecznie próbowałem wszystkiego ...

Restarting Chrome

Był kluczem do mojego sukcesu po: porady Stevena Monday

Jamie Hutber
źródło