对 ServicePointManager ServerCertificateValidationCallback 的混淆
Confusion over ServicePointManager ServerCertificateValidationCallback
我正在编写一个继承自 System.Net.WebClient
的 class。
ServiceCertificateValidationCallback
正在开火 (errors == SslPolicyErrors.None)
returns true
。
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate (Object obj, X509Certificate certificate, X509Chain chain,
System.Net.Security.SslPolicyErrors errors)
{
isTrusted = (errors == SslPolicyErrors.None);
};
哪个对象或进程调用该回调?由于它 是 被调用,我是否正确理解 chain.Build()
将是一个不必要的冗余步骤?
X509Certificate2 rootCert = (X509Certificate2)certificate;
X509Certificate2 clientCert =store.Certificates.Find(X509FindType.FindByThumbprint,
rootCert.thumbprint, false)[0]
chain.ChainPolicy.ExtraStore.Add((X509Certificate2) certificate);
if (chain.Build(clientCert))
{
// trusted chain
}
Which object or process invokes that callback?
在 .NET Framework 中大致如下:
WebClient
创建一个 HttpWebRequest
HttpWebRequest
呼叫 ServicePointManager.FindServicePoint(uri)
- 生成的
ServicePoint
实例创建连接并将 ServerCertificateValidationCallback
注册为任何封闭 TLS 隧道上的 post-handshake 挂钩。
这是一个严重的过度简化,但这些是涉及的关键 public 成员。
do I understand correctly that chain.Build()
would be an unnecessary redundant step?
除非您有特定需要将检查证书链作为自定义验证例程的一部分,否则它是多余的。
OS/platform 已经完成握手并给出了判决, ServerCertificateValidationCallback
只是您作为用户放弃连接或继续网络请求的最后机会,以实际协商为准。
我正在编写一个继承自 System.Net.WebClient
的 class。
ServiceCertificateValidationCallback
正在开火 (errors == SslPolicyErrors.None)
returns true
。
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate (Object obj, X509Certificate certificate, X509Chain chain,
System.Net.Security.SslPolicyErrors errors)
{
isTrusted = (errors == SslPolicyErrors.None);
};
哪个对象或进程调用该回调?由于它 是 被调用,我是否正确理解 chain.Build()
将是一个不必要的冗余步骤?
X509Certificate2 rootCert = (X509Certificate2)certificate;
X509Certificate2 clientCert =store.Certificates.Find(X509FindType.FindByThumbprint,
rootCert.thumbprint, false)[0]
chain.ChainPolicy.ExtraStore.Add((X509Certificate2) certificate);
if (chain.Build(clientCert))
{
// trusted chain
}
Which object or process invokes that callback?
在 .NET Framework 中大致如下:
WebClient
创建一个HttpWebRequest
HttpWebRequest
呼叫ServicePointManager.FindServicePoint(uri)
- 生成的
ServicePoint
实例创建连接并将ServerCertificateValidationCallback
注册为任何封闭 TLS 隧道上的 post-handshake 挂钩。
这是一个严重的过度简化,但这些是涉及的关键 public 成员。
do I understand correctly that
chain.Build()
would be an unnecessary redundant step?
除非您有特定需要将检查证书链作为自定义验证例程的一部分,否则它是多余的。
OS/platform 已经完成握手并给出了判决, ServerCertificateValidationCallback
只是您作为用户放弃连接或继续网络请求的最后机会,以实际协商为准。