PKIとルート証明書の更新
概要
Webサービスへの安全な接続(HTTPS)を支えるPKI(公開鍵基盤)において、**ルート証明書の更新(ローテーション)**は、クライアント環境に影響を与える重要なイベントです。 本稿では、Salesforceの「DigiCert Global Root G2」への移行事例を元に、その仕組みと対応について解説します。
要素技術
PKI (公開鍵基盤) とは
PKI (Public Key Infrastructure) とは、公開鍵暗号技術を利用して、インターネット上での安全な通信と本人確認を実現するための社会基盤(インフラストラクチャ)のことです。 PKIは以下の要素で構成されます。
- 公開鍵と秘密鍵: 暗号化と署名検証に使用する鍵のペア。
- デジタル証明書 (Digital Certificate): 公開鍵の持ち主が「誰であるか」を証明する電子的な身分証明書。
- 認証局 (CA: Certificate Authority): デジタル証明書を発行し、その正当性を保証する第三者機関。信頼の基点(トラストアンカー)となります。
- リポジトリ: 証明書や失効リスト(CRL)を公開・保管する場所。
PKIによって、「なりすまし」「改ざん」「否認」を防ぎながら、安全に情報をやり取りすることが可能になります。
信頼の連鎖 (Chain of Trust)
SSL/TLS通信では、サーバー証明書が正当であることを証明するために「信頼の連鎖」を検証します。
- ルートCA: 信頼の起点。OSやブラウザに事前インストールされている。
- 中間CA: ルートCAによって署名されている。
- サーバー証明書: 中間CAによって署名されている。
クライアントは、提示されたサーバー証明書から上位の署名をたどり、最終的に自分の持っているルートCAと一致すれば通信を許可します。
ルート証明書の更新とは
ルート認証局の有効期限切れやセキュリティ基準の変更に伴い、新しいルート証明書へ切り替えることです。
- サーバー側の変更: 証明書チェーンを新しいルートCA配下のものに差し替える。
- クライアント側の影響: 新しいルートCA証明書を保持していない古い端末や環境(古いJava, 古いOSなど)では、SSLハンドシェイクエラーが発生し接続できなくなる。
メンテナンスのポイント
ルート証明書の切り替え予告があった場合、以下の「トラストストア」を確認する必要があります。
確認すべき環境
| 環境区分 | 確認内容 | 備考 |
|---|---|---|
| クライアントPC/ブラウザ | OS/ブラウザの更新状況 | 最新のWindows/Mac/Chrome等であれば通常は自動更新される |
| Java (JDK/JRE) | cacerts ファイル | JavaはOSとは独立したキーストアを持つため要注意 |
| Dockerコンテナ | ベースイメージのOS | 古いAlpine/Ubuntuなどは証明書が古い可能性がある (ca-certificatesパッケージ) |
| レガシーシステム | OSのパッチ適用状況 | サポート切れOSでは新ルート証明書が配布されない場合がある |
Salesforceの事例 (DigiCert Global Root G2への移行)
Salesforceは2026年2月5日に、証明書チェーンを「DigiCert Global Root G2」をルートとするものへ変更します。
必要な対応
クライアント環境のトラストストアに「DigiCert Global Root G2」が含まれているか確認します。 DigiCert Global Root G3への移行ではなく、G2への移行である点に注意が必要です。
- ブラウザ: 主要ブラウザは対応済み。
- API連携: 独自のJava環境や古いLinuxサーバーからAPI接続している場合、証明書ストアの確認が必要です。
実装ガイド (.NET)
.NETバックエンドからSalesforce APIを利用する場合の、環境別対応指針です。
.NETにおける証明書検証
.NET (System.Net.Http.HttpClient) は、基本的にOSの証明書ストアを利用して検証します。OSのトラストストアに新しいルート証明書が含まれていれば、アプリのコード変更は通常不要です。
環境別の対応
- Windows / Azure VM: Windows Updateにより自動更新されます。閉域網の場合は手動インポートが必要です。
- Linux / Docker:
ca-certificatesパッケージを最新化します。# Dockerfile例 (Debian/Ubuntu)RUN apt-get update && apt-get install -y ca-certificates - Azure PaaS (App Service/Functions): Microsoftによりプラットフォーム側で管理・更新されるため、作業は不要です。
証明書の存在確認
「DigiCert Global Root G2」がトラストストアに存在するかを確認するコマンド例です。
Windows (PowerShell):
Get-ChildItem Cert:\LocalMachine\Root | Where-Object { $_.Subject -like "*DigiCert Global Root G2*" }
Linux (Debian/Ubuntu/Alpine):
/etc/ssl/certs/ca-certificates.crt に含まれているかを確認します。
grep "DigiCert Global Root G2" /etc/ssl/certs/ca-certificates.crt
コードでの注意点 (証明書ピンニング)
アプリケーション内で証明書ピンニング(Thumbprintの固定チェックなど)を行っている場合は、修正が必須です。
// 【NG】古い拇印をハードコードしていると接続不能になる
if (cert.Thumbprint == "OLD_THUMBPRINT...") return false;