ゆるテックノート

IdP/ SP証明書の基礎

SAMLでは署名や暗号化にX.509証明書を使います。役割と運用ポイントを押さえて、切替えや失効でトラブルにならないようにしましょう。

🔑 証明書の役割

署名用と暗号化用で役割が分かれます。メタデータのKeyDescriptorで用途を示します。

用途

項目 説明
署名 SAML Response/Assertion の改ざん検知と発行元確認に利用。IdP署名証明書でSPが検証。
暗号化 Encrypted Assertion などで属性を秘匿。SP公開鍵で暗号化し、SP秘密鍵で復号。
掲載先 IdP証明書はIdPが提供しメタデータに署名用途で掲載。SP証明書はSPが用意し署名/暗号化用途で掲載。

IdP証明書の主な使われ方

  • 🧭 IdPが発行する署名付きResponse/Assertionを、SPが公開鍵で検証する
  • 🧭 IdP側では主に署名用途。暗号化は通常SPの公開鍵を使う
  • 🧭 メタデータの use="signing" に登録し、ローテーション時は新旧を並行掲載する

SP証明書の主な使われ方

  • 🧭 IdPがEncrypted Assertionを発行する際に、SP公開鍵で暗号化する
  • 🧭 SP発行のLogoutRequestなどに署名する場合、SP秘密鍵で署名しIdPが検証する
  • 🧭 メタデータにSP公開鍵を載せ、use="signing" / use="encryption" を明示する

🧭 運用のポイント

切り替え手順と失効確認の運用を決めておくと、証明書が原因の障害を防ぎやすくなります。

ローテーション

  • 有効期限前に新旧を並行掲載し、猶予期間を取って切り替える
  • メタデータを先に更新し、IdP/SP双方で同期する
  • 公開鍵ピン留めをしている場合、デプロイ順序に注意

失効確認

  • CRL/OCSPの適用は信頼モデルによる。メタデータの鍵を直接信頼する運用とPKIによる証明書検証を混同しない
  • 時刻同期を維持し、Assertionの期限とメタデータの期限を確認する
  • テスト/本番で証明書を取り違えないよう分離管理する

📑 メタデータでの扱い

メタデータはIdP/SP双方の真実のソース。用途と有効期限が正しく載っているかを定期的に確認します。

チェックポイント

  • KeyDescriptorのuseが用途と一致するか。省略時は署名・暗号化の両用途を表す
  • 証明書の有効期限とSubject/Issuerが期待通りか
  • ds:X509Certificateには証明書のBase64表現を入れ、PEMのBEGIN/END行を入れない

署名付きメタデータの扱い

メタデータ自体の署名を検証し、信頼できる経路で配布することが推奨されます(OASIS Metadata仕様より)。

  • 署名付きメタデータは事前に信頼した鍵で検証する。未署名を受け入れる場合も、合意した安全な配布経路で真正性を確認する
  • 配布URLを固定し、改ざん検知のため定期的に署名検証を行う
  • entityID の一意性を担保し、意図しないエンティティと混在させない

🧾 必須運用と任意運用の整理

どこまで必須にするかは要件次第。最低限の検証は必須、そのほかは環境に合わせて決めます。

必須(実質必須)

  • IdP→SPのResponse/Assertion署名検証(IdP署名証明書で必ず検証)
  • 署名検証鍵を安全に共有する。メタデータ配布か製品の手動登録かは構成による

要件次第(任意/推奨)

  • Assertionの暗号化はブラウザ等から属性を隠す要件や連携ポリシーで決める。TLSの代わりにはならない
  • SP発行メッセージの署名(AuthnRequest/LogoutRequestなど)。セキュリティ要件で必須化するケースも
  • 証明書の有効期限・失効判定は採用する信頼モデルと製品の仕様に合わせる

仕様と関連する解説

OASIS SAML metadata / OASIS Metadata Interoperability Profile。Metadata Interoperability Profileでは、信頼済みメタデータ内の鍵に追加の証明書期限・CRL/OCSP検証を課しません。侵害鍵はメタデータから除去し、更新を行き渡らせます。TLSサーバー証明書の検証とは区別してください。
関連するSAML解説