跳到主要内容

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通信では、サーバー証明書が正当であることを証明するために「信頼の連鎖」を検証します。

  1. ルートCA: 信頼の起点。OSやブラウザに事前インストールされている。
  2. 中間CA: ルートCAによって署名されている。
  3. サーバー証明書: 中間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のトラストストアに新しいルート証明書が含まれていれば、アプリのコード変更は通常不要です。

環境別の対応

  1. Windows / Azure VM: Windows Updateにより自動更新されます。閉域網の場合は手動インポートが必要です。
  2. Linux / Docker: ca-certificates パッケージを最新化します。
    # Dockerfile例 (Debian/Ubuntu)
    RUN apt-get update && apt-get install -y ca-certificates
  3. 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;

参考資料