ゆるテックノート

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が提供されていれば検証を有効化する
  • 時刻ずれがあると失効チェックに影響するためNTP同期を維持
  • テスト/本番で証明書を取り違えないよう分離管理する

📑 メタデータでの扱い

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

チェックポイント

  • KeyDescriptor に use="signing" / use="encryption" が正しく設定されているか
  • 証明書の有効期限とSubject/Issuerが期待通りか
  • エクスポート時に余計な改行やヘッダーが混ざっていないか

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

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

  • メタデータ署名を必ず検証し、信頼できる鍵で署名されているか確認する
  • 配布URLを固定し、改ざん検知のため定期的に署名検証を行う
  • entityID の一意性を担保し、意図しないエンティティと混在させない

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

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

必須(実質必須)

  • IdP→SPのResponse/Assertion署名検証(IdP署名証明書で必ず検証)
  • メタデータに署名用証明書を掲載し、SPが参照して検証する

要件次第(任意/推奨)

  • Assertionの暗号化(SP公開鍵)。秘匿性要件があれば必須化
  • SP発行メッセージの署名(AuthnRequest/LogoutRequestなど)。セキュリティ要件で必須化するケースも
  • CRL/OCSPによる失効確認。提供されていれば有効化推奨