![](/img/trans.png)
[英]"The SSL connection could not be established, see inner exception." For POST Request(.net 6)
[英]HTTPS .Net Core 3.1 results in "The SSL connection could not be established, see inner exception."
我正在用 .Net Core 3.1 编写一些 c#“worker-service”。 我需要访问提供 SSL 证书但不受操作系统信任的 HP 打印机(专业绘图仪)上的 API。 所以我总是收到错误
The SSL connection could not be established, see inner exception.
内部异常是:
Authentication failed, see inner exception.
最后一个内部异常是:
The token passed to the function is invalid.
到目前为止,我拥有的代码如下所示:
try
{
using (var httpClientHandler = new HttpClientHandler())
{
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) => true;
using (var httpClient = new HttpClient(httpClientHandler))
{
var httpResponse = httpClient.GetAsync("http://" + protocolRelativeUrl).Result;
}
}
} catch (Exception e)
{
logger.LogError(e.Message);
}
我已经偶然发现了这些帖子:
但没有任何运气..我认为问题可能是证书似乎有效,但我的操作系统不信任:
另一件事是,当我调试我的代码时 - 我从来没有进入回调ServerCertificateCustomValidationCallback
..当然它当时不起作用:-/ 但是我怎么能让它再次实际获取数据并绕过这个证书检查?
更新
作为base64的证书内容是这样的:
-----BEGIN CERTIFICATE-----
MIICTDCCAbWgAwIBAgIE4yPFYjANBgkqhkiG9w0BAQQFADBZMR4wHAYDVQQDDBVI
UCBEZXNpZ25qZXQgRDQ5RUUyNkIxDzANBgNVBAoMBkhQIENvLjEVMBMGA1UECwwM
OENEQ0Q0OUVFMjZCMQ8wDQYDVQQLDAZGMkw0NkEwHhcNMjEwNzE5MDAwMDAwWhcN
MjYwNzE5MDAwMDAwWjBZMR4wHAYDVQQDDBVIUCBEZXNpZ25qZXQgRDQ5RUUyNkIx
DzANBgNVBAoMBkhQIENvLjEVMBMGA1UECwwMOENEQ0Q0OUVFMjZCMQ8wDQYDVQQL
DAZGMkw0NkEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALGW0b2wl9PDiMx2
6iQ2+iqUmqbCCoJczEjf7asjmGunIZpcddMkffYUhxTyVp0Hiap3zhsvTu1yBxW0
0y1gojE6Cw5/UTAdJVQ9f7DfcCEfKEeGKX/v8k8L/vM8cXLbnAAt177erGMUHl4n
2Zsvu0vB3RuAkkDj99RkRPSBHcexAgMBAAGjITAfMB0GA1UdJQQWMBQGCCsGAQUF
BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQQFAAOBgQCl5cBAkpW2YK1uN7Xg5MEi
wHtusKsmmCM4I46timFwti4rcKQzJC/lqM7w1z0k4sB7VIgn73Q4uymAEgyqokC5
ID2Yqw5T/O4Tt/PSxn9mnEdV/NTNH2c19XRv1I+YWhiKRgcEOF7gHNiYQdoHSaM5
ZKOUR8nYhLZCg2y+BJuzaw==
-----END CERTIFICATE-----
我找到了我正在寻找的答案 - 它是作为评论写在这里的一个线程中的: Allowing Untrusted SSL Certificates with HttpClient
这意味着 - 使用 .net core 3.1 无法解决这个问题 - 并且切换回 .net 2.x 不是一种选择。 修复证书也是不可能的,因为它是带有内置网络服务器的打印机,惠普决定提供带有算法 MD5 的自签名证书。 告诉我们的客户首先在他们的打印机上安装定制的(有效的)证书也不是很酷——我们的客户不是计算机科学家。
在系统上安装证书或允许注册表项HKEY_LOCAL_MACHINE SYSTEM\\CurrentControlSet\\Control\\Cryptography\\Configuration\\Local\\SSL\\00010003 Functions
的RSA/MD5
算法也不起作用。 回调ServerCertificateCustomValidationCallback
永远不会使用这样的证书执行!
晕,我是怎么解决的? 使用不同的技术:-) 现在我正在使用 Nuget Package Python.Included并且我正在通过 python 发出 HTTPS 请求。 因为 python 仍然允许完全绕过任何 SSL 证书,耶!
我的最终代码现在看起来像这样:
try
{
PythonEngine.Initialize();
dynamic sys = PythonEngine.ImportModule("sys");
dynamic ssl = PythonEngine.ImportModule("ssl");
try
{
ssl._create_default_https_context = ssl._create_unverified_context;
}
catch (Exception e)
{
SentrySdk.CaptureException(e);
}
dynamic urllibRequest = PythonEngine.ImportModule("urllib.request");
var httpResponse = urllibRequest.urlopen("https://" + protocolRelativeUrl).read();
return FetchHttp.SanitizeResult(httpResponse.ToString());
}
catch (Exception e)
{
logger.LogError("Could not fetch url: " + protocolRelativeUrl);
logger.LogError(e.Message);
SentrySdk.CaptureException(e);
}
它正在工作! <3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.