繁体   English   中英

X509VerificationFlags.IgnoreEndRevocationUnknown有什么作用?

[英]What Does X509VerificationFlags.IgnoreEndRevocationUnknown Do?

我可以验证证书的唯一方法是将X509ChainPolicy对象的VerificationFlags属性设置为IgnoreEndRevocationUnknown标志。

我正在验证的证书是有效的ssl证书,由我根据我也创建的CA证书创建。 证书的“证书路径”选项卡(在Windows资源管理器中查看)没有显示任何问题,消息为“ 此证书是可以的”。

如果我不使用IgnoreEndRevocationUnknown标志,则会得到一个StatusInformation信息, 该信息是吊销功能无法检查证书的吊销。

因此,我不确定为什么要得到它,根本不需要使用该标志。 这是一些代码:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);

var cert = store.Certificates.Find(
    X509FindType.FindBySubjectName,
    "DaveSvrCert", false
    )[0];

var chain = new X509Chain();
var policy = new X509ChainPolicy
{
    RevocationFlag = X509RevocationFlag.EntireChain,
    RevocationMode = X509RevocationMode.Online,
    VerificationFlags = X509VerificationFlags.IgnoreEndRevocationUnknown
};

chain.ChainPolicy = policy;

if (!chain.Build(cert))
{
    foreach (var chainElement in chain.ChainElements)
    {
        foreach (var chainElementStatus in chainElement.ChainElementStatus)
        {
            Console.WriteLine(chainElementStatus.Status + ": ");
            Console.WriteLine(chainElementStatus.StatusInformation);
        }
    }
}

干杯!

IgnoreEndRevocationUnknown忽略RevocationOffline错误。 这些错误是由于未正确配置CA而导致的,并且不提供证书吊销信息:

  • 颁发的证书不包含CRL Distiribution Points证书扩展
  • CRL Distiribution Points ,但是客户端无法访问任何URL。

某些应用程序默认情况下使用此标志,但是我强烈建议通过在CDR扩展中包含CRL下载的全局可用和可访问URL来解决此问题。

并且不要使用此标志,因为当客户端成功验证并接受吊销的证书时,它会引发安全漏洞。

Crypt32的答案和建议很好,但是很明显,在某些用例中,您可能不想验证,或者由于无法通过网络访问而无法验证CRL。 在这种情况下,您可以设置

chain.ChainPolicy.RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck;

并且它将完全跳过对链中所有证书的检查(可能会节省一些时间,例如网络超时)。

PS在Windows中查看证书时,只需双击它并打开“证书属性”对话框,Windows将在显示“ 此证书是确定的”时不执行CRL检查。 该消息仅取决于您信任颁发证书的事实。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM