SAML2 元数据 - 多重签名证书

Posted

技术标签:

【中文标题】SAML2 元数据 - 多重签名证书【英文标题】:SAML2 Metadata - Multiple Signing Certificates 【发布时间】:2016-06-24 20:53:08 【问题描述】:

我正在查看 SAML IdP 的元数据,它列出了三个唯一证书 - 2 个签名和 1 个加密。

    ...   
    <md:KeyDescriptor use="signing">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:KeyDescriptor use="signing">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:KeyDescriptor use="encryption">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
    </md:KeyDescriptor>
    ...

我明白为什么它列出了签名和加密证书,但我如何确定在我的服务提供商中使用哪个签名证书?为什么有两个签名证书?

提前致谢!

【问题讨论】:

ADFS 例如有两个证书用于从次要到主要的翻转。有一段时间两者都有效。你可以使用任何一个。 【参考方案1】:

当 IDP 更改它的签名证书时,它首先在元数据中与旧证书并行发布新证书。当 idp 实际切换到使用新证书时,所有 SP 都必须知道新证书,否则他们将无法验证签名。

作为 SP,您不知道 IDP 在流程中的哪个位置,因此您必须检查签名是否对列出的两个证书中的任何一个都有效。

【讨论】:

如果 IdP 不断引入新证书怎么办?我看到的唯一选择是从联合元数据的公共 URL 中获取签名 x509,但如果 URL 不可公开访问怎么办? 以及在签署 authnrequest 时,第一个还是第二个更好用?【参考方案2】:

您可能(总是)看到两个的另一个原因是您可能有一个来自反向通道证书(例如,credentials/idp-backchannel.crt 和 credentials/idp-signing.crt)

我认为有很多 SP 并不真正知道该做什么。如果您不需要反向渠道,您可以考虑将其移除(或至少不将其交给您策划的元数据中的人)。

在我的经验中令人讨厌(真的很讨厌)的事情是,这三个都是关于同一事物的单独证书(至少在我的情况下),并且所有三个同时有效(这肯定会导致困难)。

根据https://wiki.shibboleth.net/confluence/display/IDP30/Installation:

安装过程将为您建议或生成以下信息:

(开始引用)

IdP 的 entityID(您可以如上所述覆盖) 单独的自签名密钥/证书对: 消息签名 保护网络服务连接,通常在端口 8443 其他系统加密数据以供 IdP 解密 一个密钥和密钥版本文件,用于保护 IdP 为自己使用而生成的 cookie 和其他数据(这是“JCEKS”类型的特殊 Java 密钥库) 一些描述 IdP 的初始示例元数据,供合作伙伴 SP 使用,经过审核和补充后 基于此信息的一组默认 IdP 配置文件

(结束引用)

【讨论】:

以上是关于SAML2 元数据 - 多重签名证书的主要内容,如果未能解决你的问题,请参考以下文章

使用自签名证书进行 Saml 2 断言

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

Spring Security SAML IdP 元数据证书和签名

SP 元数据:用于签名和加密的证书

iOS包重签名技术知识

Spring SAML:更新元数据提供程序不会更新使用的签名证书