我是否可以在.NET中验证XMLDSIG签名而无需安装根证书?

时间:2012-04-10 15:13:58

标签: c# x509certificate xml-dsig

我想使用XMLDSIG来验证.config文件是否未被篡改。我也希望verify the signature chain能够信任签名。

我在链中有三张证书:

Root CA -> Intermediate Signing CA -> Signing Key

我检查文件是否使用中间CA颁发的密钥进行签名。

我想在不在用户的Windows证书库中安装任何证书的情况下执行此操作。这些是自签名证书,因此并非每个用户都希望我在根存储中安装它们。我在我的根商店中安装它们没有问题。

我有原始的.CER文件 - 它们包含在Signature块中,我可以将它们包含在验证码中。我可以使用X509ChainPolicy.ExtraStore来构建证书链。

如果证书未安装在根存储中,并且我验证了链,那么X509Chain.Build将返回false,并且链中包含X509ChainStatusFlags.UntrustedRoot

我可以在此操作期间添加受信任的证书吗?

1 个答案:

答案 0 :(得分:0)

假设您拥有信任链中所有签名证书的公钥的物理副本,那么可以使用OpenSSL命令行工具。

http://www.madboa.com/geek/openssl/#verify-standard

起初这是一个陡峭的学习曲线,但却是一个非常强大的实用工具。

如果您没有签名证书,则无法验证任何内容。这与尝试在没有看到原始版本的情况下验证人体签名相同。你没有什么可比的,所以你如何验证真实性?

<强>更新

这里有一些东西可以帮助你:

http://social.msdn.microsoft.com/Forums/eu/clr/thread/1966a6e8-b6f4-44d1-9102-ec3a26426789