在 C# 中使用 RemoteCertificateValidationCallback 检查 x509Certificate 吊销
x509Certificate revocation check using RemoteCertificateValidationCallback in C#
在我的 C# 项目中,我将 RemoteCertificateValidationCallback 委托的自定义实现传递给 SslStream。然后使用它来验证服务器证书。自定义实现检查默认实现设置的 sslPolicyErrors 标志,并根据结果调用自定义逻辑。默认实现为多种类型的证书问题设置标志,例如主题名称不匹配、证书链不完整或证书是否过期。
我的问题:我能否从 RemoteCertificateValidationCallback 的默认实现结果中以任何方式推断证书已被吊销(即在任何类型的 CRL 中列出)?或者我是否需要将自定义逻辑添加到我自己的 RemoteCertificateValidationCallback 实现中以进行吊销检查?
换句话说,在下面的示例代码中,如果证书被吊销,这将以任何方式反映在 sslPolicyErrors
标志、certificate
对象或 chain
目的?还是我必须为撤销检查添加额外的逻辑?
RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
else if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch)
{
// Custom check by additional data available for the certificate...
}
else
{
return false;
}
}
如果检查了吊销并且证书被吊销,则可以通过两件事检测到
sslPolicyErrors
将设置 RemoteCertificateChainErrors
位。
- 循环
chain.ChainStatus
X509ChainStatus.Status
值之一将是X509ChainStatusFlags.Revoked
。
如果请求撤销,但无法确定,则 ChainStatus 值之一将为 X509ChainStatusFlags.RevocationUnknown
。
最后,要确定是否请求撤销,您可以检查 chain.ChainPolicy.RevocationMode
。 Online
表示是,NoCheck
表示否,Offline
很复杂(检查缓存的答案,但如果没有缓存的答案,则变为 RevocationUnknown
)。
在我的 C# 项目中,我将 RemoteCertificateValidationCallback 委托的自定义实现传递给 SslStream。然后使用它来验证服务器证书。自定义实现检查默认实现设置的 sslPolicyErrors 标志,并根据结果调用自定义逻辑。默认实现为多种类型的证书问题设置标志,例如主题名称不匹配、证书链不完整或证书是否过期。 我的问题:我能否从 RemoteCertificateValidationCallback 的默认实现结果中以任何方式推断证书已被吊销(即在任何类型的 CRL 中列出)?或者我是否需要将自定义逻辑添加到我自己的 RemoteCertificateValidationCallback 实现中以进行吊销检查?
换句话说,在下面的示例代码中,如果证书被吊销,这将以任何方式反映在 sslPolicyErrors
标志、certificate
对象或 chain
目的?还是我必须为撤销检查添加额外的逻辑?
RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
else if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch)
{
// Custom check by additional data available for the certificate...
}
else
{
return false;
}
}
如果检查了吊销并且证书被吊销,则可以通过两件事检测到
sslPolicyErrors
将设置RemoteCertificateChainErrors
位。- 循环
chain.ChainStatus
X509ChainStatus.Status
值之一将是X509ChainStatusFlags.Revoked
。
如果请求撤销,但无法确定,则 ChainStatus 值之一将为 X509ChainStatusFlags.RevocationUnknown
。
最后,要确定是否请求撤销,您可以检查 chain.ChainPolicy.RevocationMode
。 Online
表示是,NoCheck
表示否,Offline
很复杂(检查缓存的答案,但如果没有缓存的答案,则变为 RevocationUnknown
)。