Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# X509证书副本_C#_Xml_Digital Signature_X509certificate_Sign - Fatal编程技术网

C# X509证书副本

C# X509证书副本,c#,xml,digital-signature,x509certificate,sign,C#,Xml,Digital Signature,X509certificate,Sign,我试图对一个XML文件进行签名,由于某种原因,它在标记下添加了两个标记。 标记中的值不相同。(见下面的示例) 如果您需要我发布更多信息,请让我知道。在XML签名中,应该包括签名证书和证书链,以便收件人可以在根CA证书之前验证信任 看 4.4.4 X509数据元素 X509数据元素中出现的所有证书都必须与验证密钥相关,要么包含验证密钥,要么是终止于包含验证密钥的证书链的一部分 如果新证书的证书链在root之前包含一个中间证书,则在X509Data中看到两个证书是正常的 root --int

我试图对一个XML文件进行签名,由于某种原因,它在
标记下添加了两个
标记。 标记中的值不相同。(见下面的示例)


如果您需要我发布更多信息,请让我知道。

在XML签名中,应该包括签名证书和证书链,以便收件人可以在根CA证书之前验证信任

4.4.4 X509数据元素

X509数据元素中出现的所有证书都必须与验证密钥相关,要么包含验证密钥,要么是终止于包含验证密钥的证书链的一部分

如果新证书的证书链在root之前包含一个中间证书,则在X509Data中看到两个证书是正常的

 root
   --intermediate1
       --leaf 

您可以在打开证书时使用编辑器(在windows中双击)检查它。

如果要删除输出中的中间证书,请更改

new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);


然后它将只写入签名证书,而不是链(根除外)。

问题是验证模式不允许多个标记。标准允许多个标记,因此我担心您必须修改验证模式。解决方法:从没有中间层的CA中选择新证书我正在签名然后验证的XML是由我们的政府颁发的。模式不允许这样做,而且当我试图在为其设计的网站上验证签名的XML时,我得到了错误(验证失败:多个元素)。所以这里唯一的办法是不同的证书?我不确定我是否理解这个问题。XMLDsig签名支持多个X509Certificate元素,如我通过的链接和[validation XSD](-schema.XSD#SPKIData)中所示。因此,如果政府使用的是自定义验证模式,那么他们的设计就不正确。您可以发布到XSD的链接吗?如果删除签名的中间证书,那么客户端将无法验证签名,因为将缺少一个证书。如果客户机在其信任列表中包含中间证书,那么您可以从签名中省略它(对XMLDsig签名库执行相同的操作)。正如我所说的,另一种选择是使用不同的证书
 root
   --intermediate1
       --leaf 
new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);
new KeyInfoX509Data(this.certificate, X509IncludeOption.EndCertOnly);