SAML SP:信任 IdP 的证书

Posted

技术标签:

【中文标题】SAML SP:信任 IdP 的证书【英文标题】:SAML SP: Trust the IdP's certificate 【发布时间】:2021-11-04 04:24:16 【问题描述】:

我是 SP 并且想要验证来自 IdP 的签名。 IdP 告诉我,我们的 SP 不信任 IdP 的证书。

据我了解,会发生这种情况:

SP-> SAML request digitally signed with private key of SP
IdP-> SAML request gets verified with public key of SP (from metadata)

IdP-> SAML response signed with private key of IdP
SP-> SAML response gets verified with public key of IdP (from metadata)

那么我需要如何信任 IdP 的证书?使用元数据中提供的公钥验证它还不够吗?我是否需要将 IdP 中的某些内容导入到我的证书文件夹中?

【问题讨论】:

听起来像是误会。信任通常是通过导入元数据来建立的。您可能需要为颁发 IdP 证书的 CA 添加一个尚未被您的系统信任的证书 我如何告诉我的系统证书是可信的?我在想它足以导入包含证书的 IdPs 元数据。 取决于您使用的 IdP。您说 IdP 告诉您 SP 不信任他们的证书。您是否收到发送给他们的错误消息?或者他们是怎么知道的? 【参考方案1】:

考虑事情的最佳方式可能是始终使用私钥进行签名,并始终使用公钥进行验证。

在 SP 发起的标准 Web 流程中,这里解释了证书的使用位置和方式:

SP --> IdP SP 发送的 AuthnRequest 使用 SP 的私钥签名,IdP 使用 SP 的公钥验证 AuthnRequest 签名 IdP --> SP IdP 发送的 SamlResponse 的至少一部分将被签名。如果整个响应不是,那么里面的断言应该是。如果整个响应都已签名,则断言不必是。无论哪种情况,都将使用 IdP 的私钥进行签名,而 SP 将使用 IdP 的公钥对其进行验证。

某些产品(可能还有所有 DIY 系统/库)可能允许您同时签署响应和断言,但没有理由这样做 - 没有。除了单独签署响应之外,它没有提供任何额外的好处。

正如 Stefan 在他的 cmets 中关于该问题所指出的那样,这个“问题”通常在产品中通过使用元数据传输来配置自身来解决,而不仅仅是通过电子邮件交换某些 URL 和公钥。元数据交换的典型流程是 SP 向 IdP 提供基线元数据文件,该文件定义 SP ACS URL、SP 用于签名验证的公钥以及其应用程序需要的属性。然后 IdP 加载它,找出它们具有哪些满足 SP 的属性要求的属性,然后生成它们的元数据,其中包含它们的协议 URL(例如应该发送身份验证请求的位置)和证书等等,将其发送回 SP。 SP 加载它,然后您就可以参加比赛了。

【讨论】:

以上是关于SAML SP:信任 IdP 的证书的主要内容,如果未能解决你的问题,请参考以下文章

我如何才能完全信任 SAML IDP?

spring saml - IDP 发起的 SSO

Spring SAML 握手失败 - 无法针对受信任的密钥验证不受信任的凭据

如何使用 SP 密钥库 spring saml 中的证书

SAML SP 元数据:自签名证书或 CA 证书,最佳实践是啥?

org.opensaml.saml2.metadata.provider.FilterException:元数据条目的签名信任建立失败