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による失効確認。提供されていれば有効化推奨