【问题标题】:Uses of two certificates and one signature使用两个证书和一个签名
【发布时间】:2018-09-19 19:51:45
【问题描述】:

我目前正在为客户开发 SSO 功能。

如果需要,我们的应用程序将在启动时使用 SSO 功能进行身份验证,如果失败则中止。

我在网上看了很多解释,也看过很多例子。

我完全不明白的是证书。具体来说,操作中似乎使用了两个(不同的?)证书。其中一个作为常量存储在我这边,另一个在签名元素的 SAML 响应中发送,如下所示:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
        <ds:Reference URI="#id-2710abae3b0457ad0c241eac043769ae78c83189">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <ds:DigestValue>???</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#id-266b413f5282d3da62de3963e5e25cb0782e1a05">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <ds:DigestValue>???</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>???</ds:SignatureValue>
    <ds:KeyInfo Id="id-266b413f5282d3da62de3963e5e25cb0782e1a05">
        <ds:X509Data>
            <ds:X509Certificate>???</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</ds:Signature>

标记为“???”的字段客户在示例响应中没有给我。

至于其他证书,这里是一个很好的例子:“App_Code/AccountSettings.cs”中的https://github.com/onelogin/dotnet-saml

此外,XML 中还有一个签名,以及其他在线示例中似乎也包含 Base64 数据的两个“DigestValue”字段。

所以我的问题是:本地证书是否与 xml 证书相同,如果不是,它们究竟是如何相关的,签名和 DigestValues 在这种关系中是否相关?

至于上下文,我正在尝试测试我的 SSO 功能,除了证书,我无法弄清楚如何在没有实际值的情况下进行测试。这可以伪造吗? SignedXml.CheckSignature 似乎总是返回 false 无论我在 XML 中放什么,甚至是“真实”示例(在线找到)。

【问题讨论】:

    标签: digital-signature saml saml-2.0 x509certificate2 auth-request


    【解决方案1】:

    SAML 基于信任圈。

    IdP 信任 SP,SP 信任 IdP。

    实现“信任”的方式是 IdP 需要注册 SP 元数据(用于验证签名和加密的实体 ID、端点和公共证书),同样的方式 SP 需要注册 IdP 元数据。

    根据您的消息,您似乎正在实施一个 SP,因此第一步是在 SP 上注册 IdP 元数据,一旦完成,您将在 SP 上存储 IdP 实体 ID、其端点以及IdP 的公共证书。 该证书必须与 SSO 过程中 IdP 发送给 SP 的 SAMLResponse 中包含的签名的 ds:X509Certificate 值匹配。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多