Bagaimana Anda menambahkan otoritas sertifikat (CA) ke Ubuntu?

166

Pekerjaan saya telah memutuskan untuk mengeluarkan otoritas sertifikat mereka sendiri (CA) untuk menangani berbagai aspek pekerjaan kami dengan aman tanpa membayar sertifikat.

  • Secara kriptografis menandatangani email
  • Enkripsikan konten email
  • Membuat akses ke hal-hal seperti perusahaan berbasis sertifikat klien IRC .
  • Cabut kunci mantan karyawan secara otomatis

Mereka mengirimi saya .pemfile, dan saya tidak yakin bagaimana cara menambahkannya ke instal Ubuntu saya. Instruksi yang dikirim adalah: "Mengklik dua kali pada Mac akan menginstalnya." 

Bagaimana saya melanjutkan? Apakah saya perlu melakukan sesuatu dengan OpenSSL untuk membuat .key, .csratau .crtfile?

Xeoncross
sumber
2
komentar "Instruksi yang dikirim adalah: \" Mengklik dua kali pada Mac akan menginstalnya. \ "" membuat hari saya
mzoll

Jawaban:

231

Menginstal CA

Salin sertifikat Anda dalam format PEM (format yang ada ----BEGIN CERTIFICATE----di dalamnya) ke /usr/local/share/ca-certificatesdan beri nama dengan .crtekstensi file.

Kemudian jalankan sudo update-ca-certificates.

Peringatan: Instalasi ini hanya memengaruhi produk yang menggunakan toko sertifikat ini. Beberapa produk mungkin menggunakan toko sertifikat lain; jika Anda menggunakan produk-produk itu, Anda juga perlu menambahkan sertifikat CA ini ke toko-toko sertifikat lainnya. ( Petunjuk Firefox , Petunjuk Chrome , Petunjuk Java )

Menguji CA

Anda dapat memverifikasi apakah ini berhasil dengan mencari sertifikat yang baru saja Anda tambahkan /etc/ssl/certs/ca-certificates.crt(yang hanya merupakan daftar panjang semua CA tepercaya Anda yang digabungkan bersama-sama).

Anda juga dapat menggunakan s_client OpenSSL dengan mencoba menyambung ke server yang Anda tahu menggunakan sertifikat yang ditandatangani oleh CA yang baru saja Anda instal.

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

Hal pertama yang harus dicari adalah rantai sertifikat di dekat bagian atas output. Ini harus menunjukkan CA sebagai penerbit (di sebelah i:). Ini memberitahu Anda bahwa server menyajikan sertifikat yang ditandatangani oleh CA yang Anda instal.

Kedua, cari verify return codepada bagian akhir yang akan diatur 0 (ok).

Mark E. Haase
sumber
3
ini benar-benar berfungsi
Sabareesh Kkanan
1
Terima kasih telah mencatat bahwa firefox / chrome tidak menggunakan toko sertifikat default.
Tim Strijdhorst
4
Perhatikan bahwa pembaruan-ca-sertifikat bisa sangat rewel (mungkin berdasarkan desain). mycert.pem.crt TIDAK berfungsi, tetapi mycert.crt berhasil. Saya juga berpikir bahwa itu harus / usr / local / share / ca-sertifikat, bukan / usr / share / ca-sertifikat (terlepas dari apa kata komentar di /etc/ca-certificates.conf).
labirin
2
Terima kasih atas crtkomentar ekstensi, itu adalah rahasia untuk mendapatkan pekerjaan ini untuk saya, saya diberi sertifikat dengan certekstensi dan bingung mengapa tidak ada yang berhasil.
Tebusan Briggs
3
Satu peringatan: s_clienttidak mengirim SNI secara default dan server mungkin memerlukan SNI terutama jika mendukung host virtual / situs dengan sertifikat berbeda; untuk kasus ini tambahkan -servername foo.whatever.com. Atau apakah itu penggunaan server web (versi modern) curlatau wgetyang melakukan SNI secara otomatis.
dave_thompson_085
66

man pembaruan-ca-sertifikat :

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.

Dari penjelasan di atas, saya akan menyimpulkan bahwa cara yang lebih disukai untuk mendapatkan file sertifikat lokal ke toko tepercaya adalah dengan memasukkannya ke dalam /usr/local/share/ca-certificates, dan kemudian jalankan update-ca-certificates. Anda tidak perlu menyentuh /etc/ssl/certssecara langsung.

Steven Monday
sumber
23
Penamaan sertifikat dengan ekstensi .crt tampaknya juga diperlukan.
perlakukan mod Anda dengan baik
Terima kasih atas catatan @ phyzome - tidak akan dapat menambahkan sertifikat saya sebaliknya.
Seiyria
1
Saya harus menambahkan --freshuntuk membuatnya berfungsi. misalnyaupdate-ca-certificates --fresh
Elijah Lynn
15

Saya memiliki masalah yang sama, dan saya harus menyalin .pemfile ke /usr/local/share/ca-certificates, menamainya sebagai .crt. The .cerFile dapat dengan mudah dikonversi ke .pem, dengan openssl, misalnya, jika Anda tidak memiliki .pem.

Setelah menyalin file, Anda harus menjalankan sudo update-ca-certificates.

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

Jawaban lain yang terkait update-ca-certificatesadalah benar untuk aplikasi yang membaca dari toko sertifikat sistem. Untuk Chrome dan Firefox, dan mungkin beberapa yang lain, sertifikat harus diletakkan di nssdb, backend untuk perpustakaan Mozilla NSS.

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

Misalnya, untuk mempercayai sertifikat CA root untuk menerbitkan sertifikat server SSL, gunakan

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <sertifikat nama panggilan> -i <sertifikat nama file>

Di mana <certificate nickname>arbitrer, dan <certificate filename>file .pem atau .crt Anda.

Referensi bermanfaat lainnya:

Johann
sumber
Terima kasih. Ini bekerja pada Ubuntu 16.04 untuk Chrome 53.0.2785.143, tetapi Firefox 49 tampaknya memiliki toko db terpisah dan harus ditambahkan dari about: preferensi # advanced [Lihat Sertifikat] -> [Pihak Berwenang] -> [Impor] Lebih lanjut tentang firefox cert store. askubuntu.com/a/248326/535154
mauron85
Ngomong-ngomong, jika Anda ingin menginstal cert sebelum menjalankan Chrome pertama (yaitu saat .pki / dir masih hilang), Anda harus terlebih dahulu membuat nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
aliasvel
Ada cara untuk membuat Chrome dan Firefox membaca dari toko sertifikat sistem. Lihat jawaban saya: superuser.com/a/1312419/506107
wheeler
11

Untuk bangunan baru berdasarkan Debian, Anda mungkin perlu menjalankan:

sudo dpkg-reconfigure ca-certificates

CATATAN: sudo dpkg-mengkonfigurasi ulang panggilan ca-sertifikat pembaruan-ca-sertifikat secara internal

Anda tentu saja masih perlu menyalin sertifikat (file .crt) ke / usr / share / ca-sertifikat sebelum Anda melakukan semua ini :)

missmah
sumber
4

Membangun berdasarkan jawaban dwmw2 , Anda benar-benar dapat memberi tahu aplikasi yang menggunakan NSS untuk manajemen sertifikat untuk menggunakan trust store sistem.

libnss3secara default dikirimkan dengan sekumpulan sertifikat CA root read-only ( libnssckbi.so), jadi sebagian besar waktu Anda perlu menambahkannya sendiri ke toko kepercayaan pengguna lokal yang berada di $HOME/.pki/nssdb. p11-kitmenawarkan pengganti drop-in untuk libnssckbi.soyang bertindak sebagai adaptor untuk sertifikat root seluruh sistem yang diinstal pada /etc/ssl/certs.

Sunting:

Tampaknya ada lebih banyak versi di libnssckbi.soluar sana daripada hanya di libnss3. Berikut ini adalah skrip untuk menemukan semuanya, mencadangkannya, dan menggantinya dengan tautan ke 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

Instruksi asli:

Untuk melakukan ini, instal p11-kitdan libnss3(jika belum diinstal):

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

Kemudian backup yang sudah ada libnssckbi.sodisediakan oleh libnss3:

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

Terakhir, buat tautan simbolis:

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

Untuk mengonfirmasi bahwa itu berhasil, Anda dapat menjalankan ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.sodan itu harus menunjukkan tautan:

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

Sekarang, jika Anda menambahkan sertifikat ke toko CA menggunakan update-ca-certificates, sertifikat itu sekarang akan tersedia untuk aplikasi menggunakan NSS ( libnss3) seperti Chrome.

kendaraan roda
sumber
1

Seperti disebutkan, berbagai aplikasi menggunakan NSS memiliki toko sertifikat sendiri. Saat Ubuntu berdiri, Anda harus menggunakan secara manual certutiluntuk menambahkan CA Anda untuk setiap aplikasi, untuk setiap pengguna.

Dalam distribusi lain seperti Fedora, hal seperti Just Works ™ dan Anda harus mengajukan bug terhadap aplikasi apa pun yang tidak secara otomatis mempercayai CA yang Anda instal update-ca-trust.

Anda dapat memperbaiki ini di Ubuntu juga dengan menginstal p11-kit-modulespaket dan kemudian mengganti modul trust root bawaan NSS dengan p11-kit-trust.so, dengan membuat tautan simbolis misalnya dari /usr/lib/firefox/libnssckbi.soke/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Kemudian Anda akan mendapatkan akar kepercayaan yang dikonfigurasikan sistem, bukan yang hard-coded. Perhatikan bahwa Ubuntu mengirimkan beberapa salinan berbeda dari pustaka libnssckbi.so tersebut dengan akar kepercayaan yang dikodekan secara keras, dan Anda harus mengganti semuanya!

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

dwmw2
sumber
Ketika saya melakukan sudo find / -type f -name "libnssckbi.so", itu ditemukan libnssckbi.sodi tiga tempat: /usr/lib/thunderbird/, /usr/lib/firefox/, dan /usr/lib/x86_64-linux-gnu/nss/. Jadi Anda mengatakan bahwa saya harus menautkan libnssckbi.soketiga folder itu ke p11-kit-trust.so?
kendaraan roda
1
Oke, baru saja mengonfirmasi bahwa penautan /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.soberfungsi seperti CHARM. Saya dapat menambahkan sertifikat ke dalam /usr/local/share/ca-certificates, menjalankan sudo update-ca-certificates, dan PRESTO, Chrome mulai menerima sertifikat yang ditandatangani sendiri.
kendaraan roda
0

Benar-benar jawaban bodoh untuk ditambahkan di sini, tetapi saya telah menghabiskan 2 jam bolak-balik dengan certutils di linux ... Saya yakin semuanya benar:

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

Tapi tetap saja, di chrome tidak ada yang berfungsi. Saya mencoba segalanya, pada akhirnya ....

Restarting Chrome

Adalah kunci keberhasilan saya setelah mengikuti: Steven Senin saran 's

Jamie Hutber
sumber