CA 証明書
別名: ルート証明書 / CA バンドル / 信頼ストア / Certificate Authority
サーバー証明書に署名する認証局(CA)自身の証明書。
HTTPS のクライアントは、手元で信頼する CA 証明書の束(CA バンドル)まで証明書チェーンをたどれるかを検証し、たどれなければ接続を拒否する。
公開:
定義
CA 証明書は、サーバー証明書に署名する認証局(CA: Certificate Authority)自身の証明書である。
HTTPS のクライアントは、サーバーが提示した証明書から中間証明書をたどり、手元で信頼するルート CA の証明書に行き着くかを検証する。
信頼する CA 証明書の集まりを CA バンドル(信頼ストア)と呼び、行き着かなければ接続を打ち切る。
詳細
どの CA バンドルを見るかはツールごとに違う。
curl の既定の CA ストアはビルド時に決まり、--cacert や CURL_CA_BUNDLE で差し替えられる。Node.js は既定で本体同梱の Mozilla の CA ストアを使い、NODE_EXTRA_CA_CERTS で証明書を追加する。
pip は 24.2 以降、certifi に加えて OS の証明書も使う。
社内プロキシが TLS を中継して独自の CA で証明書を差し替える環境では、その CA がツールの信頼ストアに無いため、curl の unable to get local issuer certificate などが出る。
よくある誤解
- 検証を切れば解決する: curl の
-kやNODE_TLS_REJECT_UNAUTHORIZED=0で通るのは、相手が本物かを確かめるのをやめたからである。
どちらの公式ドキュメントも使わないよう強く勧めている。
必要な CA 証明書を信頼ストアに足すのが正しい対処である(curl で「SSL certificate problem」が出て HTTPS にアクセスできない)。 - OS に入れた CA はすべてのツールに効く: Node.js は同梱の CA ストアを使うため、
NODE_EXTRA_CA_CERTSか--use-system-caを使わない限り、OS 側の社内 CA は効かない(Node.js で fetch が「self-signed certificate in certificate chain」で接続できない)。
関連
チェーンがつながらない原因には、サーバーが中間証明書を送っていない場合もある。
こちらはサーバー側の設定で直す。
CA バンドルの場所は環境変数で渡すことが多い。