Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows SignedXml.CheckSignature如何验证证书_Windows_Ssl_Certificate - Fatal编程技术网

Windows SignedXml.CheckSignature如何验证证书

Windows SignedXml.CheckSignature如何验证证书,windows,ssl,certificate,Windows,Ssl,Certificate,这里我有一个关于SignedXml.CheckSignature原理的问题 正如我们所知,如果调用verifySignatureOnly=false的函数,它可以验证证书 [ComVisibleAttribute(false)] public bool CheckSignature( X509Certificate2 certificate, bool verifySignatureOnly ) 但它如何验证呢? 根据我的理解,证书应该是由CA私钥加密的公钥。那么CheckSi

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

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

[ComVisibleAttribute(false)]
public bool CheckSignature(
    X509Certificate2 certificate,
    bool verifySignatureOnly
)
但它如何验证呢? 根据我的理解,证书应该是由CA私钥加密的公钥。那么CheckSignature可以获得CA公钥,然后解密证书?
我想知道它是如何工作的。希望有人能帮上忙。

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

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


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

因此CheckSignature可以获取当前证书的根证书,并验证当前证书是否有效?它本身无法获取该证书。它在引擎盖下使用CAPI来实现这一点。但是是的,它从windows证书存储中获取根证书。好的,谢谢。因此,如果我们无法获得根证书,那么验证将失败。例如,该证书是域证书。我使用证书对文件进行签名,然后将文件复制到域外,并尝试验证证书。此时,验证应该总是失败,因为我们无法获得根证书。我的理解正确吗?是的,它是正确的。当您从存储中删除任何证书(特别是根CA证书)时,验证将始终失败。您好,那么必须在存储中保留证书吗?我发现很难理解它背后的逻辑,因为第三方可以撤销证书,所以我们需要手动操作。。