SignedXml.CheckSignature 如何验证证书

How SignedXml.CheckSignature verify the certificate

这里有一个关于SignedXml.CheckSignature的原理的问题。

我们知道,如果我们调用verifySignatureOnly = false的函数,它可以验证证书。

[ComVisibleAttribute(false)]
public bool CheckSignature(
    X509Certificate2 certificate,
    bool verifySignatureOnly
)

但是怎么验证呢? 根据我的理解,证书应该是由CA私钥加密的public密钥。所以 CheckSignature 可以获得 CA public 密钥,然后解密证书? 我想知道它是如何工作的。希望有人能帮忙。

它使用 windows 证书库来构建一个证书链,直到受信任的根授权机构。在构建链时,该方法还会验证证书的吊销状态(通常来自链中所有机构的 CRL),以检查链中的任何证书是否仍然有效。

如果证书中有指向 OCSP 的链接,那么该方法可能更愿意检查这些证书的 OCSP 状态,但这取决于您使用的 OS(我认为 Win Xp 没有使用 OCSP 但 win 7+ 默认执行)。

如果该方法执行的任何检查失败,即 CRL 不可用或无法将链构建到受信任的根机构或证书被吊销,则方法 returns 为 false。