認証局とは?解説
認証局(CA)はデジタル証明書を発行・署名する信頼できる組織で、公開鍵が本当に名付けられたエンティティに属することを保証します。
公開鍵だけでは誰のものかは分かりません。誰でも生成できるからです。認証局は信頼できる公証人として振る舞うことでこれを解決します。アイデンティティを検証し、そのアイデンティティを公開鍵に結びつける証明書に署名します。CA は HTTPS を機能させる信頼の根であり、パイプラインが TLS 経由でサーバーと通信するときはいつでも CI で重要になります。
認証局とは何か
CA は要求者のアイデンティティを検証した後にデジタル証明書を発行するエンティティです。証明書に署名することで、CA はその中の公開鍵が名付けられた subject に本当に属することを保証します。ブラウザ、オペレーティングシステム、runner はデフォルトで信頼する CA のリストを備えて出荷されます。
信頼の連鎖
信頼は連鎖で流れます。オフラインで厳重に保護されたルート CA が中間 CA に署名し、それがサーバーが実際に提示する証明書に署名します。検証者はサーバーの証明書から信頼できるルートまで連鎖をたどります。すべてのリンクが確認できれば、証明書は信頼されます。
public CA と private CA
public CA(ほとんどの HTTPS サイトの背後にあるものなど)はどこでもデフォルトで信頼されます。組織は内部サービスのために private CA も運用しますが、クライアントにはその private ルートを明示的に信頼するよう伝える必要があります。この区別は runner が内部サーバーに到達する必要があるときに重要です。
CI における認証局
よくある CI のつまずきは、runner が信頼しない private CA によって署名された内部サービスにアクセスするときに、job が証明書検証エラーで失敗することです。修正は private CA 証明書を runner の trust store にインストールして TLS 検証が成功するようにすることです。
# Trust a private CA on a runner in CI
steps:
- run: |
cp internal-ca.crt /usr/local/share/ca-certificates/
update-ca-certificatesLatchkey に関する注記
Latchkey runner は標準の public CA バンドルを備えて出荷されます。自分の CA によって署名された内部サービスに到達するには、任意の標準 runner とまったく同じように、job ステップでその CA 証明書をインストールします。
重要なポイント
- 認証局は、アイデンティティを公開鍵に結びつける証明書に署名する信頼できる当事者です。
- 信頼は保護されたルート CA からサーバーが提示する証明書まで連鎖を通じて流れます。
- 内部サービスにアクセスする CI job は、runner の trust store に private CA のインストールが必要な場合があります。