使用 .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 and Digicert。证书 2 是 Digicert 并且有效。
However SslLabs https://www.ssllabs.com/ssltest/analyze.html?d=incomplete-chain.badssl.com,它告诉我应该只有两个证书,第二个证书已过期:
互联网X509Chain
类具有从环境系统状态中查找丢失的证书的逻辑,这在这里起作用。唯一一次您会从 TLS 看到不完整的链是当服务器发送不完整的链并且系统无法填充缺失的部分时。
SslLabs 正在报告 TLS 连接上具体发生的情况。 .NET的X509Chain
考虑了第二个证书,认为它在链中没有意义,并将其扔掉,这样你就看不到它了。无法通过以下方式查看 TLS 消息中的原始证书数据SslStream
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)