ssl/tls 握手在来自 asp.net core api 3.1 的 docker 容器上失败

问题描述 投票:0回答:1

我有一个 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。

docker asp.net-core ssl asp.net-web-api tls1.2
1个回答
0
投票

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

参考:https://learn.microsoft.com/en-us/sql/connect/ado-net/sqlclient-troubleshooting-guide?view=sql-server-ver16#possible-reasons-and-solutions

© www.soinside.com 2019 - 2024. All rights reserved.