SSL 証明書とは? サーバーのためのデジタル ID
SSL 証明書は、サーバーがある hostname を所有していることを証明し、クライアントが暗号化された HTTPS 接続を確立するための公開鍵を提供する、署名済みのデジタル文書です。
名前に反して、現代の「SSL 証明書」は TLS によって使用されます。証明書は hostname を暗号鍵に結び付け、クライアントがすでに信頼している認証局によって署名されます。デプロイが誤った証明書や期限切れの証明書を提供すると、ブラウザやパイプラインは接続を拒否するため、証明書は繰り返し発生する運用上の懸念事項です。
証明書の中身
証明書には、対象とする hostname、公開鍵、発行者、有効期間が含まれ、そのすべてが認証局によって署名されています。この署名により、クライアントは認証局に直接問い合わせることなく証明書を信頼できます。
信頼のチェーン
ブラウザや runner には、信頼されたルート認証局のリストが同梱されています。サーバー証明書は、中間証明書を経由してそれらのルートの 1 つまでチェーンでつながります。いずれかのリンクが欠けていると、証明書自体が正しくても検証は失敗します。
有効期間と失効
- 証明書には失効日があり、更新が必要です。
- 期限切れの証明書は、すべてのクライアント接続を壊します。
- ACME のような自動更新は、予期しない障害を防ぎます。
デプロイにおける証明書
パイプラインは、新しい hostname 用に証明書をプロビジョニングしたり、スケジュールに沿ってローテーションしたりすることがよくあります。通常、load balancer や CDN が証明書を保持して TLS を終端するため、デプロイは正しい証明書を正しい hostname に紐付ける必要があります。
証明書の問題が CI でどう現れるか
self-signed またはカスタム CA の証明書を持つ内部サービスを呼び出す job は、runner がその認証局を信頼していない限り "certificate verify failed" で失敗します。runner 上の時計のずれも、有効な証明書を期限切れに見せることがあります。
一時的な障害ではない
証明書エラーは決定論的です。証明書、チェーン、または trust store が修正されるまで、毎回同じように失敗します。これはまさにリトライで解決できない種類の障害であるため、Latchkey はリトライで覆い隠すのではなく、それらを表面化させます。
重要なポイント
- SSL/TLS 証明書は hostname を公開鍵に結び付け、信頼された認証局によって署名されます。
- 検証には、完全なチェーンに加え、hostname に一致する期限切れでない証明書が必要です。
- 証明書エラーは決定論的であり、リトライではなく修正が必要です。