手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 update-ca-certificates – 内部 CA を信頼ストアへ登録する

Ubuntu 22.04 で内部 CA を使う場合、サーバー証明書を発行するだけでは不十分です。クライアント側がその CA を信頼していなければ、curl、LDAP クライアント、APT、各種エージェントは証明書検証で失敗します。

この記事では update-ca-certificates を使い、内部 CA 証明書を Ubuntu の OS 共通の信頼ストアへ登録する手順を扱います。Ubuntu 22.04 の既存環境を保守するための確認記事です。

関連する記事
この記事で確認すること
  • 内部 CA 証明書とサーバー証明書の違い
  • /usr/local/share/ca-certificates/ への配置
  • update-ca-certificates の実行結果
  • curlopenssl、LDAPS での確認
  • 削除時とアプリケーション別の注意点
参考
書籍
参考書籍

暗号技術入門 第3版 秘密の国のアリス

証明書、CA、公開鍵暗号の基本を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

内部 CA 証明書だけを登録する

信頼ストアへ登録するのは CA 証明書です。サーバー証明書や秘密鍵を登録する場所ではありません。内部 CA の秘密鍵は CA 側で保管し、クライアントへ配布しません。

  • ca.crt は配布してよい CA 証明書
  • ca.key は配布してはいけない CA 秘密鍵
  • サーバー証明書は各サービスに配置する
  • サーバー秘密鍵は対象サービスが読む場所に限定する
  • クライアントには CA 証明書だけを信頼させる

ここでは例として example-internal-ca.crt を登録します。ファイル名は用途が分かる名前にし、拡張子を .crt にします。

CA 証明書の内容を確認する

登録前に、対象ファイルが CA 証明書であることを確認します。CA:TRUE が入っていること、issuer と subject、有効期限を見ます。

openssl x509 -in example-internal-ca.crt -noout -subject -issuer -dates
openssl x509 -in example-internal-ca.crt -noout -text | grep -A3 'Basic Constraints'

PEM 形式でない場合や、サーバー証明書を誤って渡された場合は、ここで気づけます。OS の信頼ストアへ入れる前に確認しておくと、後続の切り分けが楽になります。

信頼ストアへ配置する

Ubuntu では、ローカルで追加する CA 証明書を /usr/local/share/ca-certificates/ に置きます。その後、update-ca-certificates を実行します。

sudo install -m 0644 example-internal-ca.crt /usr/local/share/ca-certificates/example-internal-ca.crt
sudo update-ca-certificates

実行結果に 1 added のような表示が出れば、追加されたことが分かります。すでに登録済みの場合は追加数が変わらないこともあります。

登録結果を確認する

登録後は、/etc/ssl/certs/ のシンボリックリンクと、まとめられた CA バンドルを確認します。

ls -l /etc/ssl/certs | grep example-internal-ca || true
grep -n 'BEGIN CERTIFICATE' /etc/ssl/certs/ca-certificates.crt | tail
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt example-internal-ca.crt

update-ca-certificates/usr/local/share/ca-certificates//usr/share/ca-certificates/ の内容をもとに、/etc/ssl/certs/ を更新します。手で /etc/ssl/certs/ca-certificates.crt を直接編集しません。

HTTPS 接続を確認する

内部 CA で発行したサーバーへ、実際の接続名でアクセスします。証明書の SAN と接続名が一致していることが重要です。

curl -Iv https://internal.example.local/
curl --cacert example-internal-ca.crt -Iv https://internal.example.local/

OS の信頼ストアへ登録済みなら、通常の curl で検証できます。--cacert は、信頼ストアへ入れる前の一時確認にも使えます。

openssl s_client で確認する

openssl s_client では、サーバー名、証明書チェーン、検証結果を詳しく確認できます。名前検証を意識して -servername を指定します。

openssl s_client -connect internal.example.local:443 -servername internal.example.local -verify_return_error </dev/null
openssl s_client -connect internal.example.local:443 -servername internal.example.local -CAfile /etc/ssl/certs/ca-certificates.crt -verify_return_error </dev/null

Verify return code: 0 であれば、証明書チェーンの検証は成功しています。失敗する場合は、CA 登録、SAN、サーバーが提示している証明書、接続先名を分けて確認します。

LDAPS で確認する

LDAPS や SSSD では、OS の信頼ストアを使う構成と、個別の CA ファイルを指定する構成があります。まずは OS 側で信頼できるかを確認し、そのうえでアプリケーション設定を見ます。

ldapwhoami -H ldaps://ldap.example.local -D 'cn=readonly,ou=service,dc=example,dc=local' -W
openssl s_client -connect ldap.example.local:636 -servername ldap.example.local -CAfile /etc/ssl/certs/ca-certificates.crt -verify_return_error </dev/null

SSSD、OpenLDAP、389 Directory Server、Java アプリケーションなどは、参照する CA ストアが異なることがあります。OS では成功するのにアプリケーションだけ失敗する場合は、そのアプリケーションの信頼ストアを確認します。

削除する場合

内部 CA を廃止する場合は、追加した .crt ファイルを削除してから update-ca-certificates --fresh を実行します。複数のサービスが同じ CA に依存していないか先に確認します。

sudo rm /usr/local/share/ca-certificates/example-internal-ca.crt
sudo update-ca-certificates --fresh
ls -l /etc/ssl/certs | grep example-internal-ca || true

CA を削除すると、その CA で発行したサーバー証明書を信頼できなくなります。LDAP、プロキシ、内部 Web、監視エージェントなど、影響範囲を確認してから実施します。

よくある切り分け

  • CA 証明書ではなくサーバー証明書を登録している
  • 拡張子が .crt ではない
  • 証明書が PEM 形式ではない
  • SAN に接続名が入っていない
  • アプリケーションが OS とは別の信頼ストアを使っている
  • プロキシやロードバランサーが別の証明書を提示している

証明書の問題は、CA の信頼、サーバー証明書の内容、接続名、アプリケーション固有の参照先が混ざりやすいです。curlopenssl s_client で OS 側の結果を先に見ると、切り分けやすくなります。

まとめ

Ubuntu 22.04 で内部 CA を使う場合は、CA 証明書を /usr/local/share/ca-certificates/ に配置し、update-ca-certificates で OS の信頼ストアへ反映します。登録するのは CA 証明書であり、CA 秘密鍵やサーバー秘密鍵ではありません。

登録後は、curlopenssl s_client、LDAPS など、実際に使う接続名で検証します。OS では成功するのにアプリケーションだけ失敗する場合は、そのアプリケーションが別の信頼ストアを見ていないか確認します。

関連する記事
Ubuntu 22.04 update-ca-certificates – 内部 CA を信頼ストアへ登録する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る