繁体   English   中英

HTTPS .Net Core 3.1 导致“无法建立 SSL 连接,请参阅内部异常。”

[英]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 FunctionsRSA/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM