首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SignedXml.CheckSignature()为真,但SignedXml.CheckSignature(证书)为false

SignedXml.CheckSignature()为真,但SignedXml.CheckSignature(证书)为false
EN

Stack Overflow用户
提问于 2014-03-14 16:50:49
回答 3查看 4.1K关注 0票数 1

我正在从ADFS生成一个由证书签名的SAML2令牌。现在,我正在使用相同的证书来验证该签名。

代码语言:javascript
复制
X509Certificate2 cert = LoadCert();
XmlDocument token = LoadXmlToken(); //SAML2 token
XmlElement signature = GetSignatureElement(token);

SignedXml signedXml = new SignedXml(token);
signedXml.LoadXml(signature);
bool result1 = signedXml.CheckSignature();            //true
bool result2 = signedXml.CheckSignature(cert, false); //false

CheckSignature()根据令牌中包含的公钥验证签名。CheckSignature(cert,true/false)根据证书中的私钥验证签名。

怎么会是一个起作用而另一个不起作用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-14 21:19:31

方法signedXml.CheckSignature()根据包含在自己签名中的证书计算xml签名完整性。

方法SignedXml.CheckSignature(X509Certificate2,Boolean)根据作为第一个参数传递的证书计算xml签名完整性,如果第二个参数为false,则还可以在第一个参数中检查证书的有效性。

可能第二个方法返回false,因为您指定了一个错误的证书:不是执行签名的证书,或者它的状态被撤销或过期,或者它是由不可信的证书颁发机构颁发的。

票数 2
EN

Stack Overflow用户

发布于 2015-04-13 10:32:26

在使用证书检查时,我们必须在出站防火墙上为校验签名方法启用IP地址和/或URL。在我们的例子中,它试图与根CA和子CA的网站进行通信。随着防火墙的关闭,方法失败了,但是一旦我们确定了访问的URL并打开了防火墙,它就开始像预期的那样工作了。

票数 2
EN

Stack Overflow用户

发布于 2014-03-14 20:25:20

区别在于第二个参数(布尔值)。如果您查看无参数CheckSignature方法的文档,您可以发现以下内容:

此方法还计算引用摘要和签名的值。

第二种方法有文档。如果第二个参数设置为

然后,false验证签名和证书。

要验证证书,此方法可能会构建整个证书链并检查该链中所有证书的吊销信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22411140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档