我有一个 asp.net core 3.1 API,它在 docker 容器上运行。 Docker 在 Linux 服务器上工作,当 asp.net Core API 尝试连接到 Microsoft SQL Server(在 Window Server 2016 上工作)时出现如下错误:
System.Data.SqlClient.SqlException (0x80131904): 已成功与服务器建立连接,但在登录前握手时发生错误。 (提供商:SSL 提供商,错误:31 - 加密(ssl /tls)握手失败)**
API 在 http 上工作,但 API 网关是 https。
SQL Server 不支持 TLS 1.2
推荐的解决方案:在支持的 SQL Server1 版本上安装最新更新,并确保在服务器上启用 TLS 1.2 协议。
不安全的解决方案:在docker镜像/客户端环境配置TLS/SSL设置,连接TLS 1.0.
更改以下文件的内容:/etc/ssl/openssl.cnf
替换以下内容:
[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2
以下内容:
[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1
使用以下 dockerfile 命令:
RUN sed -i 's/^MinProtocol\s*=.*$/MinProtocol = TLSv1/g' /etc/ssl/openssl.cnf && \
sed -i 's/^CipherString\s*=.*$/CipherString = DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf