.NET Core - HTTPClient - Ubuntu 20.04 上的 dh 密钥太小

.NET Core - HTTPClient - dh key too small on Ubuntu 20.04

我想问问是否有办法绕过 Ubuntu 的安全检查,这样我就可以在我的 .NET Core 客户端应用程序中使用小密钥获取网站?我收到 error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small 异常。

问题是在 Ubuntu 20.04 中,openSSL 的安全级别设置为 2 并且(目前,希望有人会为 my question on Ask Ubuntu 提出答案)我不知道如何将其设置为较低的值。

除非提供 --ciphers 'DEFAULT:!DH' 参数,否则使用 curl 会出现相同的错误,因此我认为问题的根本原因在于操作系统本身。

我无法控制该网站的服务器,因此无法更改其安全设置。

到目前为止我在 C# 方面尝试过的内容:

serviceCollection.AddHttpClient<IInterface, IImplementation>()
                             .ConfigureHttpMessageHandlerBuilder(messageHandlerBuilder =>
                             {
                                 messageHandlerBuilder.PrimaryHandler = new HttpClientHandler
                                 {
                                     ServerCertificateCustomValidationCallback = (m, c, ch, e) => true
                                 };
                             });

using var httpClient = new HttpClient();
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

var websiteContent = await httpClient.GetStreamAsync(url);

在这种情况下,安全性不是什么大问题,所以我可以在这里使用任何肮脏的 hack。

如有任何帮助,我们将不胜感激。

感谢 answer received on Ask Ubuntu 我通过以下方式解决了这个问题:

  • 复制openssl.cnf文件
  • 在复制文件的顶部添加openssl_conf = default_conf
  • 最后添加:
    [ default_conf ]

    ssl_conf = ssl_sect

    [ssl_sect]

    system_default = ssl_default_sect

    [ssl_default_sect]
    MinProtocol = TLSv1.2
    CipherString = DEFAULT:@SECLEVEL=1

  • 运行 项目 OPENSSL_CONF 环境变量设置为更改配置文件的路径