SSL/TLS HTTPClient 错误
SSL/TLS error with HTTPClient
我正在尝试连接到使用正确签名的 SSL 证书的内部网站(在 Chrome 58 中工作)但是当我在 .Net 中执行此代码时它抛出错误:
The Request was aborted: Could not create SSL/TLS channel.
ServicePointManager.MaxServicePointIdleTime = 0;
ServicePointManager.Expect100Continue = true;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://internal-website");
request.Headers.Add("token", "---");
var result = client.SendAsync(request);
result.Wait();
我能想到的唯一原因是证书使用主题备用名称作为 DNS 名称(它有 4 个条目)并且 CN 与它们中的任何一个都不匹配,但它仍然适用于 Chrome 和邮递员。
我在创建 HttpClient 之前添加的代码是禁用 SSL 检查,但它没有任何想法如何调试这个问题?
排查了一番,原来是DHE密钥长度的问题。
.Net 和 IE 要求 DHE 大于或等于 1024,但对于此服务,密钥为 512。Reference to Microsoft KB
如果无法在服务器上更改密钥长度,您可以在用户计算机上更改注册表。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman]
"ClientMinKeyBitLength"=双字:00000200
我正在尝试连接到使用正确签名的 SSL 证书的内部网站(在 Chrome 58 中工作)但是当我在 .Net 中执行此代码时它抛出错误:
The Request was aborted: Could not create SSL/TLS channel.
ServicePointManager.MaxServicePointIdleTime = 0;
ServicePointManager.Expect100Continue = true;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://internal-website");
request.Headers.Add("token", "---");
var result = client.SendAsync(request);
result.Wait();
我能想到的唯一原因是证书使用主题备用名称作为 DNS 名称(它有 4 个条目)并且 CN 与它们中的任何一个都不匹配,但它仍然适用于 Chrome 和邮递员。
我在创建 HttpClient 之前添加的代码是禁用 SSL 检查,但它没有任何想法如何调试这个问题?
排查了一番,原来是DHE密钥长度的问题。
.Net 和 IE 要求 DHE 大于或等于 1024,但对于此服务,密钥为 512。Reference to Microsoft KB
如果无法在服务器上更改密钥长度,您可以在用户计算机上更改注册表。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman] "ClientMinKeyBitLength"=双字:00000200