IdP 端元数据文件中 x509 证书的用途(SSO 结构)

use*_*691 6 security certificate authentication single-sign-on shibboleth

为了实施 SSO,我一直在使用一些 IdP 和 Shibboleth SP 安装,但无法回答这个问题。

在 IdP 方面,我有一些描述一些应用程序的元数据文件。这些文件可以包含证书,但如果没有给出任何内容,通信仍然正常。如果我将相同的文件放在 SP 端,即使将一些随机字符作为证书,它仍然可以正常工作。

有人可以向我真正解释它是如何工作的,以及那些元数据文件 (IdP) 端中那些 X509 证书的目的是什么?

Bru*_*uno 10

这些证书是信任锚。它们允许您验证签名,从而建立对已交换消息的信任。(这与在浏览器中配置的用于验证 HTTPS 站点证书的受信任 CA 证书非常相似。)

SAML 请求和响应应该被签名(至少是响应)。您会发现像<ds:DigestMethod />, <ds:DigestValue />and 之类的元素<ds:SignatureValue />(尽管如果您使用 HTTP 重定向绑定,这可能会被简化)。

当 SP 通过浏览器从 IdP 获得 SAML 响应时,它必须验证它获得的签名来自它知道的 IdP 以及使用 IdP 的私钥签名的内容;可以根据元数据中配置的证书中的 IdP 公钥验证此签名。

对于 SP,不这样做会使整个过程毫无价值,并且能够在不验证 IdP 消息的真实性的情况下接受任何断言表明配置错误。

在 IdP 方面,它在某种程度上不那么重要。仅当 IdP 希望验证请求确实来自其信任的 SP 时才需要。如果 SP 请求披露某些机密属性(并非所有 SP 都应该看到),并且可能在响应中加密这些属性,以便只有该 SP 可以读取它,则这尤其有用。

话虽如此,Shibboleth 可以通过反向通道(属性服务)释放这些属性,其中 SP 和 IdP 之间直接建立连接(无需与浏览器交换消息)。在这种情况下,SP 和 IdP 之间的身份验证仍应进行,但我认为它可能在传输级别(例如客户端证书身份验证)而不是消息级别(通过 SAML 签名)工作,我不确定。无论哪种方式,您还需要为此设置信任锚。


cst*_*mas 3

这些证书用于确保 idp 和 sp 之间交换的数据是:

  • 免受窃听
  • 是从您认为向您发送消息的来源发送的
  • 消息防篡改,在传输过程中无人修改

这些是协议的安全功能,在部署生产系统时不应忽略。

在属于联盟一部分的系统中,实际上使用了 x509 证书(它们是强制性的)。