web-dev-qa-db-ja.com

Ubuntuに非対話的に新しいルート証明書を信頼させる方法は?

新しい 認証局 を作成し、手動でブラウザーにCAチェーンをインポートし、ブラウザーが仲介者によって署名された新しい証明書を信頼できることを確認した後、CA証明書チェーン(pemおよびcrt形式)を次のディレクトリにあるUbuntuサーバー:

  • / etc/ssl/certificates /
  • / usr/local/share/ca-certificates /

ただし、これが行われると、wget/curl/JavaなどのUbuntuマシン上のアプリケーションは、新しい証明書を使用する接続をまだ信頼しません。 another post によると、証明書がある各マシンでdpkg-reconfigure -f noninteractive ca-certificatesまたはupdate-ca-certificatesを実行する必要があります。これらのコマンドが機能しないだけでなく、何千ものサーバーに対してコマンドを実行することは現実的ではありません。構成管理にはCFEngineを使用していますが、私が知る限り、この種の機能を備えているようには見えません。

数千のマシンに対して機能する方法で信頼できるCA証明書を非対話的に更新するようにUbuntuをスクリプト化する方法はありますか?

8
MrDrMcCoy

私はBillThorが言及したすべてに同意しますが、update-ca-certificatesが面倒すぎて怠惰になりすぎて、実際に必要なものを更新しないように見えるため、証明書ストアを完全に再構築する必要がある場合があることを付け加えます。

rm -f /usr/local/share/ca-certificates/certificate.crt
# --fresh is needed to remove symlinks to no-longer-present certificates
update-ca-certificates --fresh

また、update-ca-certificatesが完了すると、/etc/ssl/certs/*.pemファイルが/usr/local/share/ca-certificates/または/usr/share/ca-certificates/のそれぞれの証明書にシンボリックリンクされているはずです。 BillThorが述べたように、名前として指紋を含むファイルへのシンボリックリンクもあります。これは349f2832.0に似ています。

Ls -lはこれを確認できます。

--snip--
lrwxrwxrwx 1 root root     72 Feb  6  2014 Security_Communication_EV_RootCA1.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_EV_RootCA1.crt
lrwxrwxrwx 1 root root     69 Mar 25  2014 Security_Communication_RootCA2.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt
lrwxrwxrwx 1 root root     69 Feb  6  2014 Security_Communication_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_Root_CA.crt
lrwxrwxrwx 1 root root     61 Feb  6  2014 Sonera_Class_1_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Sonera_Class_1_Root_CA.crt
--snip--

また、*。crtと* .pemは同じファイルであることに注意してください。つまり、元の.crtは.pem形式でなければなりません。

.pem形式のファイルは次のようになります。

-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
--snip--
IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
O+7ETPTsJ3xCwnR8gooJybQDJbw=
-----END CERTIFICATE-----

証明書に対してopensslを実行することにより、証明書のインストールをテストできます:openssl x509 -in /etc/ssl/certs/[certname].pem -noout -textおよびopenssl x509 -in /usr/local/share/ca-certificates/[certname].pem -noout -text(もちろん[certname]を置き換えます)

証明書に関する広範な情報が表示され、両方が一致しているはずです(シンボリックリンクがあるため、同じファイルである必要があります)。

それらが一致しない場合は、update-ca-certificates --freshを再実行する必要があります

有用な情報がまったく出力されない場合は、証明書を確認して、それが有効なPEM形式であることを確認する必要があります。

[〜#〜] edit [〜#〜]:BillThorは、これはJavaでは機能しないと述べましたが、少なくともdebianではJavaの証明書ストアも最新の状態に保たれているようですupdate-ca-certificatesツール。おそらくAdobe Airアプリを実行しているWine以外に、代替の証明書ストアを使用するLinux上の他のものについては知りません。

7
stonecrusher

update-ca-certificatesのようなツールは、証明書のハッシュ値と一致するシンボリックリンクによって証明書がリンクされていることを確認します。 cfengineを使用して証明書を展開する場合、証明書をコピーした後にシンボリックリンクを追加する手順を含めます。これは、証明書がインストールされたときにプログラムを実行するよりも簡単に定義できることがわかりました。

Javaは、インストールディレクトリ内にあるcacertsファイルを使用します。新しいcacertsファイルをインストールするか、証明書をcacertsファイルにインポートする必要があります。または、既存のjssecacertsファイルの横にcacertsファイルをインストールすることもできます。どちらのファイルでも、信頼するすべての証明書がファイルに含まれていることを確認する必要があります。これはデフォルトセットのサブセットである場合があります。最も簡単で最も安定したオプションは、デフォルトのJavaバージョンにファイルをインストールすることです。cacertsの証明書は、さまざまな認証局がそのパブリックトラスト証明書を更新するときに定期的に更新されるため、このファイルを長期間維持する必要があります。

使用しているブラウザーによっては、証明書を信頼できる証明書としてブラウザーのキーストアにインストールする必要がある場合があります。

2
BillThor