【发布时间】:2021-10-13 08:35:51
【问题描述】:
从旧版本的实体框架(核心 3)升级到这个之后:
Microsoft.EntityFrameworkCore.SqlServer/5.0.2
只有当我从我的 Docker 容器(在 asp.net core.5 中)连接到删除的 SqlServer 2008R2 时,我才开始收到连接错误。当我通过在 Azure 上创建新的 sqlerver 目录进行测试并进行相同的连接测试时,我没有收到错误消息(请参阅下面的错误消息)。
不幸的是,我正在使用无法升级 2008R2 的托管服务,并且我知道它已经过时,但仍然希望有一种解决方法可以让我使用它来使其正常工作。主机不会将任何新补丁应用到服务器(即使它们由于生命周期结束而可用)。
下面是我的连接字符串,它可以从我的 linux docker 实例连接到 sql azure,但在连接到 2008R2 时不起作用。
Server=tcp:mysite.com,1433,1433;Initial Catalog=dbcatalog1;Persist Security Info=False;User ID=user1;Password={passwordhere};MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=False;Connection Timeout=30;
这是我遇到的错误
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)\n","stream":"stdout","time":"2021-08-07T
18:53:54.515357149Z"}
【问题讨论】:
-
不确定这是根本原因,但这个
tcp:mysite.com,1433,1433是错误的。端口不应指定两次。很可能是服务器强制加密,但客户端和服务器不共享任何加密套件。 -
感谢@DavidBrowne-Microsoft,它实际上不在我的真实代码中,但无论如何我都仔细检查了。还是一样的问题。我认为这与这个问题 TLS 1.2 和 linux 有关。我不想降级 TLS。 stackoverflow.com/questions/66445221/…
-
您的 SQL Server 2008R2 机器可能没有 TLS 1.2。
-
是的,它设置了 TLS 1.2。
标签: sql-server docker asp.net-core entity-framework-core sql-server-2008-r2