Simple.OData.Client开发的Excel插件出现SSL/TLS安全通道创建失败问题
解决方案:Simple.OData.Client 无法创建SSL/TLS安全通道(Ubuntu 22.04服务端升级后)
问题根源
Ubuntu 22.04 LTS 默认禁用了 TLS 1.0、TLS 1.1 等老旧加密协议,仅保留 TLS 1.2 和 TLS 1.3。而 Simple.OData.Client 5.26.0 版本默认未主动启用这些高版本协议,导致与服务端握手失败;Excel 自带的 OData 连接器会自动适配服务端支持的最高TLS版本,因此能正常连接。
具体修复方案
1. 全局强制启用高版本TLS
在初始化 ODataClientSettings 之前,添加全局协议配置代码,让整个应用使用 TLS 1.2/1.3:
// 放在ODataClientSettings初始化之前 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; // 原有的ODataClientSettings初始化代码 ODataClientSettings odcSettings = new ODataClientSettings(); Uri uriOdata = new Uri(datosDeConexion.Url); odcSettings.BaseUri = uriOdata; // ... 其余代码保持不变
2. 为Simple.OData.Client单独配置TLS协议
如果不想影响全局HTTP请求,可通过自定义 HttpClientHandler 仅针对OData客户端设置TLS版本:
var handler = new HttpClientHandler(); // 指定支持的TLS版本 handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13; ODataClientSettings odcSettings = new ODataClientSettings(); Uri uriOdata = new Uri(datosDeConexion.Url); odcSettings.BaseUri = uriOdata; odcSettings.Credentials = new NetworkCredential(datosDeConexion.Username, datosDeConexion.Password); // 将自定义handler传入设置 odcSettings.HttpMessageHandler = handler; // ... 其余BeforeRequest等配置保持不变
3. 验证服务端支持的TLS版本(可选)
用openssl命令确认服务端是否真的支持TLS1.2/1.3:
# 测试TLS1.2 openssl s_client -connect your-odata-server-domain:443 -tls1_2 # 测试TLS1.3 openssl s_client -connect your-odata-server-domain:443 -tls1_3
如果命令返回正常的证书信息,说明服务端配置没问题,只需调整客户端代码即可。
4. .NET Framework版本适配(若插件基于旧框架)
如果插件运行在.NET Framework 4.5或更早版本,默认不支持TLS1.2,需在app.config中添加配置:
<configuration> <system.net> <settings> <servicePointManager securityProtocol="Tls12,Tls13" /> </settings> </system.net> </configuration>
内容的提问来源于stack exchange,提问作者QLands - Carlos Quiros
相关产品推荐
相关产品推荐

