我在Windows系统上使用.NET(实际上是C#)代码,并且我给了(指纹或整个公共部分)一个SSL服务器证书S.现在我想知道(在。 NET代码):
在此系统上运行的.NET代码是否会信任此服务器证书X?
,例如,如果在这个系统上,我会创建一个System.Net.WebClient并将其指向使用该服务器证书的HTTPS URL,那么它是否会被信任?
我知道我可以查看Windows信任存储(本地计算机 - >受信任的根证书颁发机构等)并尝试计算X是否可信,还要查看中间权限,证书链等。但是我不知道要准确实现什么算法,所以我更喜欢重用.NET已经使用的算法。
(澄清一下,这是一个安装程序类型的程序,其中使用证书X的服务器实际上还不可用 - 否则我只能对这样的服务器进行测试调用,并查看是否存在信任错误的结果。)
答案 0 :(得分:2)
您是否拥有完整的SSL证书或仅包含指纹/公钥?
要检查一个证书的信任,您需要构建整个链到根CA,并且此根CA需要位于受信任的根存储(LocalMachine或CurrentUser)中。但是,如果没有SSL证书作为x509或没有关于其发行者的知识,那将是不可能的。
如果您拥有SSL证书,则可以使用X509Chain class及其Build method构建链。然后检查ChainStatus以获取链的状态的详细错误信息。