【发布时间】:2020-03-06 15:23:23
【问题描述】:
使用 .NET Core 2.2,我需要重新创建一个不完整的链 SSL 错误,但是 ServerCertificateValidationCallback 给了我一个与我预期不同的证书链,这些证书通过了验证。有人可以解释这里出了什么问题吗?
调用 badssl.com 的独立测试:
public void DoTheThing()
{
string URI = "https://incomplete-chain.badssl.com";
ServicePointManager.ServerCertificateValidationCallback +=
new RemoteCertificateValidationCallback(Validate.ValidateRemoteCertificate);
using (WebClient wc = new WebClient())
{
var output = wc.DownloadString(URI);
}
}
public static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors)
{
return policyErrors == SslPolicyErrors.None;
}
我的回调中的 X509Chain 参数包含 3 个证书,*.badssl.com、Digicert 和 Digicert。证书 2 是 Digicert 并且有效。
但是SslLabs,它告诉我应该只有两个证书,第二个已过期:
【问题讨论】:
-
检查你的逻辑。很可能是返回第三个证书无效的状态并失去第二个证书有效的事实。
-
对于过期的证书,您需要使用不同的 URL,即:
https://expired.badssl.com/。您正在访问的 URL 是关于不完整的链,与过期证书无关。而https://incomplete-chain.badssl.com的设置存在缺陷,因此大多数框架都无法对其进行可靠测试。将构建链并接受连接。
标签: c# asp.net-core ssl ssl-certificate x509certificate