Ubuntuに認証局(CA)を追加するにはどうすればよいですか?


166

私の仕事は、証明書にお金を払うことなく、仕事のさまざまな側面を安全に処理するために、独自の認証局(CA)を発行することにしました。

  • 電子メールの暗号化署名
  • メールの内容を暗号化する
  • 企業のIRCクライアント証明書ベースのようなものにアクセスします。
  • 元従業員のキーを自動的に取り消す

彼らは私に.pemファイルを送信しましたが、Ubuntuのインストールにどのように追加するのか分かりません。送信された指示は、「Macでダブルクリックするとインストールされるはずです」でした。 

どうすればいいですか?私は何かをする必要がありますOpenSSLを作成するために.key.csrまたは.crtファイルを?


2
「送信された指示は次のとおりでした。\ "Macでダブルクリックしてインストールする必要があります。\" "私の日
mzoll

回答:


231

CAのインストール

証明書をPEM形式(含まれている形式----BEGIN CERTIFICATE----)にコピー/usr/local/share/ca-certificatesし、.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)


3
これは実際に動作します
サバリーシュッカナン

1
firefox / chromeはデフォルトの証明書ストアを使用しないことに注意していただきありがとうございます。
ティムストライドホルスト

4
update-ca-certificatesは非常に細心の注意を払う必要があることに注意してください(おそらく設計による)。mycert.pem.crtは機能しませんでしたが、mycert.crtは機能しました。また、/ usr / share / ca-certificatesではなく、/ usr / local / share / ca-certificatesである必要があると思います(/etc/ca-certificates.confのコメントに関係なく)。
ラビリンス

2
crt拡張機能のコメントのおかげで、それがこの作品を手に入れる秘secretでした。cert拡張機能を備えた証明書が与えられ、何も機能しなかった理由について混乱しました。
身代金ブリッグス

3
注意点:s_clientデフォルトではSNIを送信せず、特に異なる証明書を持つ仮想ホスト/サイトをサポートする場合、サーバーはSNIを必要とする場合があります。この場合、を追加し-servername foo.whatever.comます。または、Webサーバーを使用している場合(最新バージョン)curlまたはwgetSNIが自動的に実行されます。
-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.

上記から、ローカル証明書ファイルを信頼できるストアに入れる好ましい方法は、それらをに入れてから/usr/local/share/ca-certificates実行することだと推測しますupdate-ca-certificates/etc/ssl/certs直接触れる必要はありません。


23
証明書に.crt拡張子を付けることも必要と思われました。
よくあなたの改造を扱う

メモ@phyzomeをありがとう-そうでなければ私の証明書を追加できなかっただろう。
セイリア

1
動作さ--freshせるために追加する必要がありました。例update-ca-certificates --fresh
エリヤリン

15

同じ問題が発生したため、.pemファイルをにコピーする必要が/usr/local/share/ca-certificatesありました.crt.cerファイルを簡単に変換することができ.pem、あなたが持っていない場合、例えば、opensslのと、.pem

ファイルをコピーした後、実行する必要がありますsudo update-ca-certificates


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

14

その他の回答はupdate-ca-certificates、システム証明書ストアから読み取るアプリケーションに適しています。ChromeおよびFirefox、およびおそらく他のいくつかの場合、証明書はMozilla NSSライブラリのバックエンドであるnssdbに配置する必要があります。

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

たとえば、SSLサーバー証明書を発行するためにルートCA証明書を信頼するには、次を使用します。

certutil -d sql:$ HOME / .pki / nssdb -A -t "C ,," -n <証明書のニックネーム> -i <証明書のファイル名>

場所<certificate nickname>は任意で、<certificate filename>.pemまたは.crtファイルです。

その他の参考資料:


ありがとう。Chrome 53.0.2785.143のUbuntu 16.04で動作しますが、Firefox 49には個別のストアデータベースがあるようで、about:preferences#advanced [View Certiticates]-> [Authorities]-> [Import] Firefox cert storeの詳細を追加する必要があります。askubuntu.com/a/248326/535154
mauron85

ところで、あなたは証明書をインストールする場合は、(.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

11

Debianベースの新しいビルドの場合、次を実行する必要があります。

sudo dpkg-reconfigure ca-certificates

注:sudo dpkg-reconfigure ca-certificatesは内部でupdate-ca-certificatesを呼び出します

もちろん、これを行う前に、証明書(.crtファイル)を/ usr / share / ca-certificatesにコピーする必要があります:)


4

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、これらの証明書はlibnss3ChromeなどのNSS()を使用するアプリケーションで使用できるようになります。


1

前述のように、NSSを使用するさまざまなアプリケーションには独自の証明書ストアがあります。Ubuntuのcertutil現状では、各ユーザーの各アプリケーションにCA を手動で追加する必要があります。

Fedoraなどの他のディストリビューションでは、このようなことはJust Works™であり、インストールするCAを自動的に信頼しないアプリケーションに対してはバグを報告する必要がありますupdate-ca-trust

p11-kit-modulesパッケージをインストールし、NSS ビルトイン信頼ルートモジュールをp11-kit-trust.soに置き換えることにより、Ubuntuでもこれを修正できます。たとえば、から/usr/lib/firefox/libnssckbi.soへのシンボリックリンクを作成します。/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

次に、ハードコードされたルートではなく、システムの構成された信頼ルート取得します。Ubuntuには、libnssckbi.soライブラリの複数の異なるコピーがハードコード化された信頼ルートとともに出荷されていることに注意してください。これらすべてを置き換える必要があります。

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


私が行ったときはsudo find / -type f -name "libnssckbi.so"、それが見つかりましたlibnssckbi.so:3ヶ所で/usr/lib/thunderbird//usr/lib/firefox//usr/lib/x86_64-linux-gnu/nss/。だからあなたは私libnssckbi.soがそれらのフォルダの3つすべてにリンクする必要があると言っていますp11-kit-trust.soか?
ウィーラー

1
さて、リンク/usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.soCHARMのように機能することを確認しました。Chromeに証明書を追加し/usr/local/share/ca-certificates、実行しsudo update-ca-certificates、さきがけて、Chromeは自己署名証明書の受け入れを開始しました。
ウィーラー

0

ここに追加する真剣に愚かな答えですが、Linuxでcertutilsを使用して前後に2時間費やしていました...すべてが正しいと確信しました:

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

それでも、クロムでは何も機能していませんでした。結局、すべてを試しました。

Restarting Chrome

フォローした後、私の成功の鍵でした:Steven Mondayのアドバイス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.