題 如何向Ubuntu添加證書頒發機構(CA)?


我的工作決定發行自己的 證書頒發機構 (CA)安全地處理我們工作的不同方面而無需支付證書。

  • 密碼簽名電子郵件
  • 加密電子郵件內容
  • 訪問像公司這樣的東西 IRC 基於客戶證書。
  • 自動撤銷前僱員的鑰匙

他們送我一個 .pem 文件,我不知道如何將其添加到我的Ubuntu安裝。發送的指令是: “在Mac上雙擊它應該安裝它。”

我該怎麼辦?我需要做些什麼 OpenSSL的 創造一個 .key.csr, 要么 .crt 文件?


137
2018-06-15 16:14


起源




答案:


安裝CA.

以PEM格式(具有的格式)複製證書 ----BEGIN CERTIFICATE---- 在它裡面 /usr/local/share/ca-certificates 並用a命名 .crt 文件擴展名。

然後跑 sudo update-ca-certificates

注意事項: 此安裝僅影響使用此證書存儲的產品。有些產品可能會使用其他證書店;如果您使用這些產品,則還需要將此CA證書添加到其他證書存儲區。 (Firefox說明Chrome說明Java指令

測試CA.

您可以通過查找剛剛添加的證書來驗證這是否有效 /etc/ssl/certs/ca-certificates.crt (這只是您所有可信CA連接在一起的長列表)。

您還可以通過嘗試連接到您知道使用剛剛安裝的CA簽名的證書的服務器來使用OpenSSL的s_client。

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

首先要尋找的是靠近輸出頂部的證書鏈。這應該顯示CA作為發行者(旁邊 i:)。這告訴您服務器正在顯示由您正在安裝的CA簽名的證書。

第二,尋找 verify return code 最後要設置為 0 (ok)


186
2018-02-19 19:13



這一個確實有效 - Sabareesh Kkanan
感謝您注意firefox / chrome不使用默認的證書庫。 - shokora
請注意,update-ca-certificates可能非常挑剔(可能是設計)。 mycert.pem.crt不起作用,但是mycert.crt沒有。我還認為它需要是/ usr / local / share / ca-certificates,而不是/ usr / share / ca-certificates(儘管在/etc/ca-certificates.conf中有什麼評論)。 - labyrinth
謝謝你 crt 擴展評論,這是讓我為我工作的秘訣,我獲得了一個證書 cert 擴展,並為什麼沒有工作困惑。 - Ransom Briggs
一個警告: s_client 默認情況下不發送SNI,服務器可能需要SNI,特別是如果它支持具有不同證書的虛擬主機/站點;對於這種情況添加 -servername foo.whatever.com。或者如果是的話 捲筒紙 服務器使用(現代版) curl 要么 wget 自動做SNI。 - dave_thompson_085


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.

從上面我可以推斷,將本地證書文件放入受信任存儲區的首選方法是將它們放入 /usr/local/share/ca-certificates,然後運行 update-ca-certificates。你不需要觸摸 /etc/ssl/certs 直。


56
2018-06-15 18:07



用.crt擴展名命名證書似乎也是必需的。 - phyzome
感謝@phyzome的說明 - 否則無法添加我的證書。 - Seiyria


我有同樣的問題,我不得不復制 .pem 歸檔到 /usr/local/share/ca-certificates,將其重命名為 .crt。該 .cer 文件可以很容易地轉換為 .pem例如,如果沒有openssl,請使用openssl .pem

複製文件後,您必須執行 sudo update-ca-certificates


15
2018-04-30 13:39



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


關於的其他答案 update-ca-certificates 對於從系統證書存儲區讀取的應用程序是正確的。對於Chrome和Firefox,可能還有其他一些,證書必須放在nssdb中,即Mozilla NSS庫的後端。

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

例如,要信任根CA證書以頒發SSL服務器證書,請使用

certutil -d sql:$ HOME / .pki / nssdb -A -t“C ,,” - n <證書暱稱> -i <證書文件名>

哪裡 <certificate nickname> 是任意的,而且 <certificate filename> 是你的.pem或.crt文件。

其他有用的參考:


12
2017-10-10 18:46



謝謝。它適用於Chrome 53.0.2785.143的Ubuntu 16.04,但Firefox 49似乎有單獨的商店數據庫,必須從about:preferences [advanced] [查看證書] - > [權限] - > [導入]添加有關firefox證書庫的更多信息。 askubuntu.com/a/248326/535154 - mauron85
順便說一句,如果你想安裝證書 之前 首次運行Chrome(即,當.pki / dir仍然缺失時),您必須先創建nssdb: mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password - akavel
有一種方法可以讓Chrome和Firefox從系統證書庫中讀取。看到我的回答: superuser.com/a/1312419/506107 - wheeler


對於基於Debian的新版本,您可能需要運行:

sudo dpkg-reconfigure ca-certificates

注意:sudo dpkg-reconfigure ca-certificates在內部調用update-ca-certificates

在執行任何此操作之前,您當然仍需要將證書(.crt文件)複製到/ usr / share / ca-certificates :)


8
2017-09-02 06:19





建立在dwmw2上 回答,您實際上可以告訴使用NSS進行證書管理的應用程序使用系統信任庫。

libnss3 默認情況下附帶一組只讀的根CA證書(libnssckbi.so),所以大多數時候你需要自己手動將它們添加到位於的本地用戶信任存儲中 $HOME/.pki/nssdbp11-kit 提供直接替代 libnssckbi.so 它充當安裝在系統範圍的根證書的適配器 /etc/ssl/certs

編輯:

似乎有更多的版本 libnssckbi.so 在那里而不僅僅是在 libnss3。以下是一個腳本,可以全部查找,備份它們,並用鏈接替換它們 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

原始說明:

為此,請安裝 p11-kit 和 libnss3 (如果他們還沒有被插入):

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

然後備份現有的 libnssckbi.so 由...提供 libnss3

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

最後,創建符號鏈接:

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

要確認它是否有效,您可以運行 ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so 它應該顯示鏈接:

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

現在,如果使用添加證書到CA商店 update-ca-certificates,這些證書現在可供使用NSS的應用程序使用(libnss3)比如Chrome。


1
2018-04-10 01:00





如上所述,使用NSS的各種應用程序都有自己的證書存儲區。就像Ubuntu上的東西一樣,你必須手動使用 certutil 為每個用戶添加每個應用程序的CA.

在像Fedora這樣的其他發行版中,這種東西Just Works並且您應該針對任何不會自動信任您安裝的CA的應用程序提交錯誤 update-ca-trust

您也可以通過安裝來修復Ubuntu中的問題 p11-kit-modules 包裝然後更換NSS 內置信任根源 模塊用 p11-kit-trust.so,例如通過製作符號鏈接 /usr/lib/firefox/libnssckbi.so 至 /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

那麼你  獲取系統配置的信任根,而不是一些硬編碼的信任根。請注意,Ubuntu有多個 不同 具有硬編碼信任根的libnssckbi.so庫的副本,您必須替換所有這些庫!

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


1
2017-12-12 12:36



我什麼時候做的 sudo find / -type f -name "libnssckbi.so",它找到了 libnssckbi.so 在三個地方: /usr/lib/thunderbird/, /usr/lib/firefox/,和 /usr/lib/x86_64-linux-gnu/nss/。所以你說我應該鏈接 libnssckbi.so 在所有這三個文件夾中 p11-kit-trust.so? - wheeler
好的,剛剛確認鏈接 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so  - > /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so 像CHARM一樣工作。我能夠添加證書 /usr/local/share/ca-certificates, 跑 sudo update-ca-certificates和PRESTO一樣,Chrome開始接受自簽名證書。 - wheeler


嚴重愚蠢的回答添加到這裡,但我花了2個小時來回與linux中的certutils來回...我確信一切都是正確的:

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

但是,在Chrome中,沒有任何工作。我嘗試了一切,最終......

Restarting Chrome 

以下是我成功的關鍵: 史蒂文星期一的建議


0
2018-01-02 12:58