如何在不导入根证书的情况下验证X509证书?
|
我的程序包含2个我知道并信任的根证书。
我必须验证信任中心的证书和信任中心颁发的\“ user \”证书,这些证书都源自这两个根证书。
我使用X509Chain类进行验证,但仅在根证书位于Windows证书存储区中时才有效。
我正在寻找一种无需导入theeses根证书的方式来验证证书的方法-以某种方式告诉X509Chain类,我确实信任此根证书,并且它应该仅检查链中的证书,而不能进行其他任何检查。
实际代码:
X509Chain chain = new X509Chain();
chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
chain.ChainPolicy.ExtraStore.Add(root); // i do trust this
chain.ChainPolicy.ExtraStore.Add(trust);
chain.Build(cert);
编辑:这是一个.NET 2.0 Winforms应用程序。
没有找到相关结果
已邀请:
5 个回复
刷遍派戳
通过实验还发现
即使您没有将证书添加到ExtraStore中,这也会使build方法返回true,这完全违背了检查的目的。我不建议出于任何原因使用此标志。
谦响局豢报
和 确定它是否是您信任的证书。我建议比较
到
代表您的证书 作为上下文中的根信任(即逐字节比较而不是 使用指纹值)。 (如果设置了其他标志,那么其他约束也将放宽) 所以你应该这样:
可扇胆
但是,如果您只是在寻找一种从其他主机接受SSL证书的方法,则可以在web.config文件中修改system.net设置: 下面是一个X509CertificateValidator的示例,该示例测试LocalMachine / Personal存储中是否存在客户端证书。 (这不是您所需要的,但可以作为示例。
荒劫娇噬
在调用函数中,我现在可以成功检查是否有未知证书来自国家根证书:
要完成此操作,请执行以下操作:检查根证书(通常已安装该证书,因为它已包含在Windows Update中,但理论上也可能会丢失),我将友好名称和指纹与已发布的值进行了比较:
我不确定此检查是否完全安全,但就我而言,Windows Forms应用程序的操作员一定可以访问要安装的有效证书。该软件的目的只是过滤证书列表,以帮助他仅在计算机的计算机存储中安装正确的证书(该软件还会安装中间证书和根证书的公共密钥,以确保证书的运行时行为。网络服务客户端正确)。
戊袱