【问题标题】:HTTPS .Net Core 3.1 results in "The SSL connection could not be established, see inner exception."HTTPS .Net Core 3.1 导致“无法建立 SSL 连接,请参阅内部异常。”
【发布时间】:2021-12-09 06:44:15
【问题描述】:

我正在使用 .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-----

【问题讨论】:

  • This answer 建议可能是因为 “链上的证书是使用不受支持或禁用的算法签名的。” - 证书上的算法是什么?更好的是,也许您可​​以单击“详细信息”选项卡上的“复制到文件”,将其导出为 base64 文件,然后将其包含在您的问题中?
  • @Llama 我已将证书更新为 base 64 的问题????
  • @Llama uhm,我怎样才能正确检测到此证书使用的算法..?
  • 老实说,我不确定这是否是问题所在。我尝试使用 X509Certificate 类直接读取您的证书,这本身就可以,但我不确定如何在 HTTP 请求的上下文中读取证书。我有点希望有证书的其他人有答案。

标签: c# .net


【解决方案1】:

我找到了我正在寻找的答案 - 它是作为评论写在这里的一个线程中的:Allowing Untrusted SSL Certificates with HttpClient

这意味着 - 使用 .net core 3.1 解决此问题是不可能的 - 并且切换回 .net 2.x 不是一种选择。修复证书也是不可能的,因为它是带有内置网络服务器的打印机,HP 决定提供使用算法 MD5 的自签名证书。告诉我们的客户首先在他们的打印机上安装定制(有效)证书也不是很酷 - 我们的客户不是计算机科学家..

在系统上安装证书或在注册表项HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010003 Functions 中允许RSA/MD5 算法也不起作用。回调ServerCertificateCustomValidationCallback 永远不会使用这样的证书执行!

Sooo,我是怎么解决的?使用不同的技术:-) 现在我正在使用 Nuget 包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);
}

它正在工作!

【讨论】:

  • 实际的解决方案是信任证书并且使用损坏的算法。 allowing the RSA/MD5 algorithm in the registry key 刚刚坏了
  • @PanagiotisKanavos,当它是 MD5 时,这应该如何“信任”它?
  • 不要使用 MD5。这绝对没有任何借口。它已经坏了,比根本不使用 SSL 好不了多少——比如,破解它需要几秒钟。
  • 如果这看起来很极端,请记住,在新冠肺炎之前几年前,被黑客入侵的打印机被用于 DDOS 攻击。正是出于这个原因,HP 禁用了其打印机上的 Web 服务
  • 我假设惠普不再支持这些机器。这是一个丑陋的情况。在这种情况下,您不应该信任 MD5 证书。一种选择是实际使用计算机作为打印服务器,而不是通过网络连接到它们。使用防火墙也可以,但这需要额外的工作。
猜你喜欢
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
相关资源
最近更新 更多