gpt4 book ai didi

c# - SQL Server 登录前握手(错误 : 31 - Encryption(ssl/tls) handshake failed)

转载 作者:行者123 更新时间:2023-12-02 22:50:42 26 4
gpt4 key购买 nike

我有一个 SQL Server 版本 12.0.6205 以及 .Net Core 3.1(或 6)Web Api Controller 中的以下代码:

 var builder = new SqlConnectionStringBuilder
{
DataSource = DataSource,
UserID = UserID,
Password = Password,
InitialCatalog = InitialCatalog,
ApplicationIntent = ApplicationIntent.ReadWrite,

// Same result if true/true
Encrypt = false,
TrustServerCertificate = false
};

var connection = new SqlConnection(builder.ToString());
using (var cmd = new SqlCommand() { Connection = connection, CommandText = "SELECT TOP 1 * FROM [dbo].[Table]" })
{
connection.Open(); // Breaks here
var reader = cmd.ExecuteReader();
Console.WriteLine(reader.HasRows);
}

在本地,此代码可以正常工作,但在 Azure 的应用程序服务中执行时,它会在打开以下连接时中断:

System.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)

如果创建的话,我也能够在本地重现该错误基于 appsvc/dotnetcore (任何标签)构建的 docker 镜像

FROM mcr.microsoft.com/appsvc/dotnetcore:3.1-latest_20220105.1

ENV ASPNETCORE_URLS=http://+:80

EXPOSE 8080
WORKDIR /home/site/wwwroot/
COPY . .

ENTRYPOINT ["dotnet", "Test.dll"]

最佳答案

就像 @DraggonDragger 所说,这是一个 TLS 问题,但在我的具体情况下,我不能依赖更新的 SQL 服务器来允许 TLS 1.2,因此我必须在应用程序中允许 TLS 1.0。

我最终得到了这个答案:https://stackoverflow.com/a/61523341/17892120;

本质上,对于 docker 镜像,添加这一行就足够了:运行 sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g'/etc/ssl/openssl.cnf

对于 Azure 的应用服务,我们可以添加sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g'/etc/ssl/openssl.cnf && dotnet Test.dll 用于启动命令。

为了将来的引用,GitHub 上也有关于此的讨论,link .

关于c# - SQL Server 登录前握手(错误 : 31 - Encryption(ssl/tls) handshake failed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70652241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com