【问题标题】:How SignedXml.CheckSignature verify the certificateSignedXml.CheckSignature 如何验证证书
【发布时间】:2015-08-17 01:58:13
【问题描述】:

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

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

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

但它如何验证呢? 根据我的理解,证书应该是由CA私钥加密的公钥。那么CheckSignature可以得到CA公钥,然后解密证书吗? 我想知道它是如何工作的。希望有人能提供帮助。

【问题讨论】:

    标签: windows ssl certificate


    【解决方案1】:

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

    如果证书中有指向 OCSP 的链接,则该方法可能更愿意检查这些证书的 OCSP 状态,但这取决于您使用的操作系统(我认为 Win Xp 没有使用 OCSP,但 win 7+ 默认情况下会这样做)。

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

    【讨论】:

    • 那么CheckSignature可以获取当前证书的根证书,并验证当前证书是否有效?
    • 它自己没有得到它。它在后台使用 CAPI 来做到这一点。但是是的,它从 Windows 证书存储中获取根证书。
    • 好的,谢谢。所以如果我们不能得到根证书,那么验证就会失败。例如,证书是域证书。我使用证书签署文件,然后将文件复制出域,并尝试验证证书。这时候,验证应该总是失败,因为我们无法获得根证书。我的理解对吗?
    • 是的,没错。当您从存储中删除任何证书(尤其是根 CA 证书)时,验证将始终失败。
    • 您好,所以商店里必须要有证书吗?我觉得很难理解其背后的逻辑,因为第 3 方可以吊销证书,所以我们需要手动做一些事情..
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 2011-04-06
    • 2022-01-09
    • 1970-01-01
    • 2021-07-22
    • 2016-09-22
    • 2015-12-18
    相关资源
    最近更新 更多