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。
这里有一个关于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。