小编use*_*548的帖子

SignedXml.CheckSignature在.NET 4中失败,但它适用于.NET 3.5,3或2

我收到了第三方网络服务的回复.我加载了一个带有该响应的XmlDocument.

  string txt = readStream.ReadToEnd();
  response = new XmlDocument();
  response.PreserveWhitespace = true;
  response.LoadXml(txt);   
  return response;
Run Code Online (Sandbox Code Playgroud)

现在我想验证响应是否使用证书签名.我有一个VerifyXmlDoc(XmlDocument xmlDoc)我在msdn上找到的方法.

我知道这条消息是正确的.

    public bool VerifyXmlDoc(XmlDocument xmlDoc)
    {

        SignedXml signed = new SignedXml(xmlDoc);

        XmlNodeList signatureNodeList = xmlDoc.GetElementsByTagName("Signature");


        signed.LoadXml((XmlElement)signatureNodeList[0]);

        X509Certificate2 serviceCertificate = null;
        foreach (KeyInfoClause clause in signed.KeyInfo)
        {
            if (clause is KeyInfoX509Data)
            {
                if (((KeyInfoX509Data)clause).Certificates.Count > 0)
                {
                    serviceCertificate = (X509Certificate2)((KeyInfoX509Data)clause).Certificates[0];
                }
            }
        }


        bool result = signed.CheckSignature(serviceCertificate, true);
        return result;

    }
Run Code Online (Sandbox Code Playgroud)

如果我将我的项目的目标框架设置为.NET 3.5或.NET 3,或.NET 2,它的工作原理很棒.结果是真的.但是如果我将目标框架更改为.NET 4,则结果为false.(我必须使用.NET 4)

关于如何解决这个问题的任何想法?

c# security certificate signature signedxml

34
推荐指数
2
解决办法
8005
查看次数

标签 统计

c# ×1

certificate ×1

security ×1

signature ×1

signedxml ×1