当.net说"证书有效"时,它检查什么?

时间:2016-01-19 10:44:26

标签: x509 x509certificate2

我使用SignedXml.CheckSignature(X509Certificate2, boolean)方法。我想知道在确定证书的有效性时执行了哪些检查。我已经确认已选中“当前用户/非受信任”列表。文档说它将使用"地址簿"存储,按主题密钥标识符搜索,以构建证书链。我想这意味着本地计算机和当前用户证书存储?

我是否认为不会检查证书撤销和签名时间戳?要对证书撤销进行OCSP检查,我是否有义务使用Bouncy Castle?

2 个答案:

答案 0 :(得分:0)

msdn article you link to的评论中发现:

  

在.NET Framework 1.1版中,未验证X.509证书。

     

在2.0及更高版本中,验证了X.509证书。   在.NET Framework 2.0及更高版本中,CheckSignature方法将在“AddressBook”存储中搜索适合验证的证书。例如,如果证书由主题密钥标识符(SKI)引用,则CheckSignature方法将选择具有此SKI的证书并逐个尝试,直到它可以验证证书。

因此,首先,该方法的行为在不同的.NET框架版本中已经发生了变化。因此,对于可重现的结果,您最好不要依赖该方法,甚至根本不检查证书。

此外,制定一个接一个地尝试它们,直到它可以验证证书听起来像是否可能是数学测试证书是否由其所谓的发行人签署。

答案 1 :(得分:0)

https://referencesource.microsoft.com/#System.Security/system/security/cryptography/xml/signedxml.cs,b9518cc2212419a2

检查

  • 证书没有密钥用法扩展,或密钥用法扩展已启用数字签名或不可否认用法
  • 证书链接到受信任的根颁发机构
  • 证书尚未撤销
  • 调用此方法时证书未过期
    • 它不知道文件何时签署,所以它没有回答这个问题。
  • 用户或系统配置明确禁止链中的任何证书。