You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至.NET 8后OpenSSL 3配置失效,如何默认启用TLSv1?

.NET 8 + OpenSSL 3.0 配置TLSv1默认启用的问题

问题背景

之前在Docker中使用mcr.microsoft.com/dotnet/aspnet:7.0(内置OpenSSL 1.1.1)托管.NET 7应用时,为解决MSSQL连接问题,在/etc/ssl/openssl.cnf中配置了以下内容:

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1

升级到mcr.microsoft.com/dotnet/aspnet:8.0(内置OpenSSL 3.0.11)后,该配置失效,出现MSSQL连接握手失败错误,堆栈信息如下:

Unhandled exception. Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)
  ---> System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream.
    at System.Net.Security.SslStream.ReceiveHandshakeFrameAsync[TIOAdapter](CancellationToken cancellationToken)
    at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
    at System.Net.Security.SslStream.AuthenticateAsClient(SslClientAuthenticationOptions sslClientAuthenticationOptions)
    at Microsoft.Data.SqlClient.SNI.SNITCPHandle.EnableSsl(UInt32 options)

需解决:如何在OpenSSL 3中默认启用TLSv1?

解决方案

OpenSSL 3.0对配置结构做了调整,核心是初始化入口节点变更,具体操作如下:

  1. 修改OpenSSL配置文件
    编辑/etc/ssl/openssl.cnf,替换为以下内容:

    [openssl_init]
    ssl_conf = ssl_sect
    
    [ssl_sect]
    system_default = system_default_sect
    
    [system_default_sect]
    MinProtocol = TLSv1
    CipherString = DEFAULT@SECLEVEL=1
    

    关键变化:将原1.1.1版本的[default_conf]替换为OpenSSL 3.0的新全局配置入口[openssl_init],这是原配置失效的核心原因。

  2. 验证配置生效
    执行以下命令测试是否能通过TLSv1连接MSSQL服务器:

    openssl s_client -connect <你的MSSQL服务器地址>:1433 -tls1
    

    若能成功建立连接,说明配置已生效。

  3. Docker镜像中持久化配置
    若通过Dockerfile构建镜像,建议将配置修改写入镜像,避免每次容器启动重复配置:

    FROM mcr.microsoft.com/dotnet/aspnet:8.0
    COPY openssl.cnf /etc/ssl/openssl.cnf
    # 其他镜像构建步骤...
    

补充说明

  • SECLEVEL=1的设置保持不变,它允许使用较弱加密算法和旧协议,适配旧版MSSQL服务器需求。

内容的提问来源于stack exchange,提问作者Ilia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:22:50