C# .NET Core websocket ssl 问题 - dh 密钥太小

Posted

技术标签:

【中文标题】C# .NET Core websocket ssl 问题 - dh 密钥太小【英文标题】:C# .NET Core websocket ssl issue - dh key too small 【发布时间】:2020-06-10 15:47:00 【问题描述】:

我在 Centos 7 上使用 openssl 1.0.2 的 C# websocket 客户端应用程序遇到问题。我们有一个应用程序可以在我们的 Windows 机器上毫无问题地连接到(第三方)websocket 服务器。当我们尝试从我们的 linux 机器连接到第三方的生产环境时,它会失败(尽管我们可以很好地连接到他们的 UAT ws 服务器)。该错误与“dh key too small”有关。

Afaik,问题的根本原因可能是第三方生产服务器正在运行过时的 openssl 版本。我无法控制这一点,也无法强制他们升级。

如果我(在我的 python 代码中)更改 ssl 密码字符串(例如 ssl._DEFAULT_CIPHERS += 'ALL:!EXPORT:!LOW:!aNULL:),我可以使用 python 测试应用程序成功连接到第三方生产服务。 !eNULL:!SSLv2:!DH')。 '!DH' 部分似乎是解决此问题的一种方法。我还应该注意 - 这都是在私人网络中(没有公共互联网公开)。

对于 linux 环境中的 .NET Core 应用,我们如何以类似的方式更新密码或达到相同的效果。我们需要对 openssl 进行更改吗?有没有办法在我们的 C# 代码中做到这一点。任何建议将不胜感激!

谢谢

【问题讨论】:

【参考方案1】:

感谢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 环境变量设置为的情况下运行项目 修改后的配置文件的路径

【讨论】:

以上是关于C# .NET Core websocket ssl 问题 - dh 密钥太小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net core 中使用 websockets

C# ASP.NET Core Serilog 添加类名和方法到日志

ASP.NET Core WebSockets

在 .Net Core 中序列化 WebSocket 对象

csharp medium_net_core_configuration_classes.cs

关于ASP.NET Core WebSocket实现集群的思考