这里我有一个关于SignedXml.CheckSignature原理的问题。
如我们所知,如果我们使用verifySignatureOnly = false调用该函数,它可以验证证书。
[ComVisibleAttribute(false)]
public bool CheckSignature(
X509Certificate2 certificate,
bool verifySignatureOnly
)
但它怎么验证? 根据我的理解,证书应该是由CA私钥加密的公钥。所以CheckSignature可以获取CA公钥,然后解密证书? 我想知道它是如何工作的。希望有人可以提供帮助。
答案 0 :(得分:1)
它使用Windows证书存储区构建最高可信根权限的证书链。在构建链时,该方法还会验证证书的撤销状态(通常来自链中所有权限的CRL),以检查链中的任何证书是否仍然有效。
如果证书中有OCSP链接,那么该方法可能更喜欢检查这些证书的OCSP状态,但这取决于您使用的操作系统(我认为Win Xp没有使用OCSP,但默认情况下赢得7+) )。
如果方法执行的任何检查失败,即CRL不可用或链无法构建到受信任的根颁发机构或证书被撤销,则方法返回false。