繁体   English   中英

使用x509证书签署SAML断言时“格式错误的引用元素”

[英]'Malformed reference element' when signing SAML assertion with x509 certificate

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

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

格式错误的参考元素http://tennysonhull.com/Public/StackOverflow/SigningSAMLAssertionError.png

我所做的调试和研究似乎表明代码不是问题,但只是让你理解我是如何得到的: ComputeSignature()调用来自CertificateUtility - > AppendSignatureToXMLDocument方法 ,该方法是从SAML20Assertion调用的- > SerializeAndSignSAMLResponse方法 ,由IdPLauncher.aspx页面间接调用。

这是在我尝试签署包之前断言的样子 我已经彻底检查了这一点并通过调试器运行它而没有发现它的问题。

我的假设是证书有问题,为了测试目的而自签名。 我正在与之合作的公司向我保证,其他已集成的人过去曾使用过测试证书,但我认为没有其他理由可以解决这个问题。 虽然我尝试了很多变化,但我认为最有可能根据我的研究生成工作测试证书的命令是: makecert.exe -a md5 -r -pe -n "CN=iGradTest" -ss my -sr localmachine -sky signature "c:\\iGradTest.cer" ,但结果证书仍然存在同样的问题。 生成的证书已被赋予友好名称,并设置为使用winhttpcertcfg与IIS协同工作。 应用程序成功获取证书,但在尝试将其添加到断言时失败。

我不知道接下来要做什么。 任何有关识别和解决此问题的后续步骤的建议将不胜感激。 感谢您抽出时间阅读/协助。

您遇到的异常意味着引用的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM