web-dev-qa-db-ja.com

IdP側のメタデータファイル内のx509証明書の目的(SSO構造)

SSOを実装するために、私はいくつかのIdPとShibboleth SP installを使用して、この質問に答えることができませんでした。

IdP側には、いくつかのアプリケーションを説明するいくつかのメタデータファイルがあります。これらのファイルには証明書を含めることができますが、何も指定されていなくても通信は正常に機能します。同じファイルをSP側に配置した場合、ランダムな文字を証明書として配置しても問題なく機能します。

誰かが実際にそれがどのように機能するか、それらのメタデータファイル(IdP)側のX509証明書の目的は何ですか?

5
user72691

これらの証明書はトラストアンカーです。これにより、署名を検証できるため、交換されたメッセージへの信頼を確立できます。 (これは、HTTPSサイトの証明書を認証するためにブラウザーで構成されている信頼できるCA証明書とよく似ています。)

SAML要求と応答には署名が必要です(少なくとも応答)。 <ds:DigestMethod /><ds:DigestValue /><ds:SignatureValue />などの要素が見つかります(ただし、HTTPリダイレクトバインディングを使用している場合、これは簡略化される可能性があります)。

SPは、ブラウザーを介してIdPからSAML応答を取得するときに、取得した署名が、認識しているIdPからのものであること、およびIdPの秘密鍵を使用して何が署名されているかを確認する必要があります。この署名は、メタデータで構成された証明書のIdPの公開鍵に対して検証されます。

SPの場合、これに失敗するとプロセス全体の価値がなくなり、IdPのメッセージの信頼性を検証せずにアサーションを受け入れることができるようになると、構成エラーが示唆されます。

IdP側では、それほど重要ではありません。 IdPが要求が本当にSPから信頼されたものであることを確認したい場合にのみ必要です。SPが特定の機密属性を(すべてのSPが見る必要があるわけではない)開示され、おそらくこれらの属性を応答で暗号化して、これだけがSPで読み取れるようにします。

つまり、Shibbolethは、SPとIdPの間の接続が直接行われる(ブラウザーとのメッセージ交換なしで)バックチャネル(属性サービス)を通じてこれらの属性を解放できます。 SPとIdPの間の認証はこのイベントでも発生するはずですが、メッセージレベル(SAMLシグネチャ経由)ではなく、トランスポートレベル(クライアント証明書認証など)で機能する可能性があります)、どちらにしても、トラストアンカーを設定する必要があります。

8
Bruno

これらの証明書は、idpとspの間で交換されるデータを確実にするために存在します。

  • 盗聴から安全
  • メッセージの送信元と思われる送信元から送信された
  • メッセージは改ざん防止されており、転送中に誰も変更していません

これらはプロトコルのセキュリティ機能であり、本番システムをデプロイするときに省略すべきではありません。

フェデレーションの一部であるシステムでは、x509証明書が実際に使用されます(必須です)。

2
cstamas

X509証明書には公開鍵暗号化の鍵が含まれており、IdP鍵はIdPからのメッセージへの署名、IdPへのメッセージの暗号化、またはその両方に使用できます(ただし、通常はIdPへのメッセージを暗号化しません)。

署名と暗号化の違いについては、このスタックオーバーフローの質問をご覧ください。 https://stackoverflow.com/questions/454048/what-is-the-difference-between-encrypting-and-signing-in-非対称暗号化

メタデータでキーを使用する例については、Shibbolethのドキュメントをご覧ください。 https://wiki.shibboleth.net/confluence/display/CONCEPT/MetadataKeyDescriptor

キーが実際に署名または暗号化に使用されるかどうかは、IdPとSPの間で渡されるメッセージのプロファイルによって異なります。つまり、メッセージの形式がSAML1またはSAML2のどちらであるか、およびどのエンドポイントが使用されるかを示します。

1
Alex Stuart