【问题标题】:'Malformed reference element' when signing SAML assertion with x509 certificate使用 x509 证书签署 SAML 断言时出现“格式错误的参考元素”
【发布时间】:2014-10-28 00:40:04
【问题描述】:

我正在构建一个 SAML IdP 来处理学生门户和第三方系统之间的 SSO。我的代码基于CoverMyMeds Test Harness,我在我的项目中使用了他们的一些未更改的库。我还设置了他们的示例身份提供程序,以便更轻松地调试此问题。

我在此基础上构建的用于处理身份验证的页面从学生门户获取 GUID,使用它从内部服务检索学生详细信息并将其打包到 SAML 断言中,然后使用 x.509 证书对其进行签名在将其发送给第 3 方 SAML 服务提供商之前。正是在这里,我被困住了。尝试签署我收到的 SAML 请求时:


(来源:tennysonhull.com

我所做的调试和研究似乎表明代码不是问题,但只是为了让您了解我是如何到达这里的:ComputeSignature() 调用来自 CertificateUtility -> AppendSignatureToXMLDocument method,它的调用来自SAML20Assertion -> SerializeAndSignSAMLResponse method,被IdPLauncher.aspx page间接调用。

This is what the assertion looks like 在我尝试签署包裹之前。我对此进行了彻底的检查,并通过调试器运行了它,但没有发现问题。

我的假设是证书有问题,该证书是自签名用于测试目的。与我合作的公司向我保证,其他集成的人过去曾使用过测试证书,但我想不出其他原因会导致失败。尽管我尝试了许多变体,但根据我的研究,我认为最有可能生成工作测试证书的命令是:makecert.exe -a md5 -r -pe -n "CN=iGradTest" -ss my -sr localmachine -sky signature "c:\iGradTest.cer",但生成的证书仍然存在同样的问题。已为生成的证书指定了一个友好名称,并设置为使用 winhttpcertcfg 与 IIS 一起使用。应用程序成功获取证书,但尝试将其添加到断言时失败。

我不知道下一步该做什么。任何有关确定和解决此问题的后续步骤的建议将不胜感激。感谢您抽出宝贵时间阅读/协助。

【问题讨论】:

    标签: c# .net certificate single-sign-on saml-2.0


    【解决方案1】:

    您面临的异常意味着引用的URI 无法解析为另一个带有ID 属性标记的元素。

    根据提供的代码,SAML20Assertion.cs:90 将 # 添加到 ID,然后 CertificateUtility.cs:69 再次添加它。从其中一个位置移除它,一切都很好。

    SAML20Assertion.cs:90:

    CertificateUtility.AppendSignatureToXMLDocument(ref xmlResponse, "#" + ((AssertionType)Response.Items[0]).ID, SigningCert);
    

    应该是

    CertificateUtility.AppendSignatureToXMLDocument(ref xmlResponse, ((AssertionType)Response.Items[0]).ID, SigningCert);
    

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2014-06-17
      • 2021-10-28
      • 2021-01-29
      • 2012-06-13
      相关资源
      最近更新 更多