.NET App accesses MSSQL to report TLS issue on Linux and Docker

1.使用.NET6开发一程式,它需要访问MSSQL,在Linux和Docker下都报: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)

2.初判是MSSQL版本过低,使用较旧的TLS,于是修改Linux和Docker的openssl.cnf文件。

openssl.cnf on Linux

bash 复制代码
# 1.Go to the path of openssl.cnf
  cd /etc/ssl

# 2.Backup the openssl.cnf
  sudo cp openssl.cnf openssl-bakcup.cnf

# 2.Modify the openssl.cnf
  sudo nano openssl.cnf
  #Add at the bottom of the file
    [system_default_sect]
    # CipherString = DEFAULT:@SECLEVEL=2
    MinProtocol = TLSv1
    CipherString = DEFAULT@SECLEVEL=0

openssl.cnf on Linux

bash 复制代码
# 1.Copy the openssl.cnf(/etc/ssl) of Linux to the the same directory as the Dockerfile
    sudo cp /etc/ssl/openssl.cnf {/path/to/file}

# 2.Modify Dockerfile to copy the file to Docker image.
    FROM harbor.xxx.com/dotnet/aspnet:6.0
    MAINTAINER XXX
    ENV ASPNETCORE_ENVIRONMENT=Development
    ENV TZ=Asia/Shanghai
    ENV LANG=en_US.UTF-8
    # RUN sed -i 's|\[openssl_init\]|&\nssl_conf = ssl_configuration\n[ssl_configuration]\nsystem_default = tls_system_default\n[tls_system_default]\nMinProtocol = TLSv1\nCipherString = DEFAULT@SECLEVEL=0|' /etc/ssl/openssl.cnf
    COPY ./openssl.cnf /etc/ssl/openssl.cnf

    WORKDIR /app

    #RUN dotnet restore
    #RUN dotnet publish -c Release -o out -r linux-x64

    COPY ./publish .
    ENV ASPNETCORE_URLS http://0.0.0.0:80
    ENTRYPOINT ["dotnet", "xxx.dll"]

CipherString 选项

CipherString 用于定义可接受的密码套件和安全级别。密码字符串 DEFAULT 表示使用 OpenSSL 内置的默认密码套件。

  • @SECLEVEL=2 为密码套件设置安全级别(Level 2)。OpenSSL 支持以下安全级别:
Level 描述
0 无任何安全保证
1 避免使用弱加密算法,如单 DES 或 40 位 RC4
2 要求 112 位安全强度(默认),禁止使用过时的密码套件,如 SSLv3 和低强度密码套件。
3 要求 128 位安全强度,进一步约束密码套件的选择。
4 要求 192 位安全强度,进一步约束密码套件的选择。
5 要求 256 位安全强度,仅允许最高强度的加密算法。
相关推荐
bjzhang7518 分钟前
CentOS下安装MySQL详解
linux·mysql·centos
Jason_chen2 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld2 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
数据库小学妹3 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai
极客先躯3 小时前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
weixin_523185323 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
My is 李豆4 小时前
CentOS 7 安装 Docker 完整教程(含 docker-compose 插件)
docker·eureka·centos
凡人叶枫4 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
云栖梦泽4 小时前
玩转RK3506SDK
linux·嵌入式硬件
极客先躯4 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷