在 X509Chain 中使用自定义根目录进行在线吊销检查
Online Revocation Checking Using Custom Root in X509Chain
我需要使用未存储在受信任的根 CA 存储中的根证书来验证叶证书。使用 X509Chain
并将 X509ChainPolicy.RevocationMode
设置为 X509RevocationMode.NoCheck
并将 X509ChainPolicy.VerificationFlags
设置为包含标志 X509VerificationFlags.AllowUnknownCertificateAuthority
时,这非常有效。我使用 X509Chain.ChainPolicy.ExtraStore
.
向 X509Chain 提供我的根证书
当我想检查叶证书的吊销状态时出现问题。叶证书提供 CRL 分发点,但在使用 X509RevocationMode.Online
时,我得到这些状态:X509ChainStatusFlags.RevocationStatusUnknown
和 X509ChainStatusFlags.OfflineRevocation
。
如果我将根安装到受信任的根 CA 存储中,吊销检查工作正常。但是,如前所述,我的应用程序不会将这些安装到证书库中。
以下是我目前尝试执行此操作的方法:
Dim certChain As New X509Chain
certChain.ChainPolicy.RevocationMode = X509RevocationMode.Online
certChain.ChainPolicy.RevocationFlag = X509RevocationFlag.EndCertificateOnly
certChain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority Or X509VerificationFlags.IgnoreNotTimeValid
certChain.ChainPolicy.ExtraStore.Add(rootCertificate)
Dim blnValid As Boolean = certChain.Build(certificate)
感谢任何帮助。
这在当前版本的 .NET 中是不可能的。
已经为 .NET 5 编写了一项功能,但尚未发布,您可以添加
certChain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
certChain.ChainPolicy.CustomTrustStore.Add(rootCert);
然后用指定的证书替换该链的根信任列表。
但系统不会下载或从缓存中处理来自不受信任机构的撤销。当前 .NET 的唯一选择是
- 将您的证书注册为受信任的
- 不关心撤销
- 使用另一个链提供者(P/Invoking 进入 OS 库,或使用第三方库)。
我需要使用未存储在受信任的根 CA 存储中的根证书来验证叶证书。使用 X509Chain
并将 X509ChainPolicy.RevocationMode
设置为 X509RevocationMode.NoCheck
并将 X509ChainPolicy.VerificationFlags
设置为包含标志 X509VerificationFlags.AllowUnknownCertificateAuthority
时,这非常有效。我使用 X509Chain.ChainPolicy.ExtraStore
.
当我想检查叶证书的吊销状态时出现问题。叶证书提供 CRL 分发点,但在使用 X509RevocationMode.Online
时,我得到这些状态:X509ChainStatusFlags.RevocationStatusUnknown
和 X509ChainStatusFlags.OfflineRevocation
。
如果我将根安装到受信任的根 CA 存储中,吊销检查工作正常。但是,如前所述,我的应用程序不会将这些安装到证书库中。
以下是我目前尝试执行此操作的方法:
Dim certChain As New X509Chain
certChain.ChainPolicy.RevocationMode = X509RevocationMode.Online
certChain.ChainPolicy.RevocationFlag = X509RevocationFlag.EndCertificateOnly
certChain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority Or X509VerificationFlags.IgnoreNotTimeValid
certChain.ChainPolicy.ExtraStore.Add(rootCertificate)
Dim blnValid As Boolean = certChain.Build(certificate)
感谢任何帮助。
这在当前版本的 .NET 中是不可能的。
已经为 .NET 5 编写了一项功能,但尚未发布,您可以添加
certChain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
certChain.ChainPolicy.CustomTrustStore.Add(rootCert);
然后用指定的证书替换该链的根信任列表。
但系统不会下载或从缓存中处理来自不受信任机构的撤销。当前 .NET 的唯一选择是
- 将您的证书注册为受信任的
- 不关心撤销
- 使用另一个链提供者(P/Invoking 进入 OS 库,或使用第三方库)。