Entity Framework Core 7连接证书信任异常

35

我最近在开发中升级到了Entity Framework Core 7,但是出现了一个异常:“已经成功地与服务器建立了连接,但在登录过程中发生了错误。(提供程序:SSL提供程序,错误:0-证书链由不受信任的机构颁发。)” 我正在使用Microsoft SQL Server Developer(64位)。我尝试在VS2022 Server Explorer中进行更改以禁用加密并信任服务器证书,但我没有安装服务器证书,异常仍然存在。如何在开发中解决这个问题?

6个回答

72

EF Core 7.0中不存在错误,而是增强了安全性。Microsoft建议采用以下3个解决方案之一:

  1. 安装有效的证书。
  2. 在连接字符串中添加TrustServerCertificate=True。
  3. 在连接字符串中添加Encrypt=False。

旧行为:默认情况下,SqlClient连接字符串使用Encrypt=False。这样可以在本地服务器没有有效证书的开发机器上进行连接。

新行为:SqlClient连接字符串默认使用Encrypt=True。这意味着:

服务器必须配置有效证书。

客户端必须信任此证书。

如果不满足这些条件,则会引发SqlException异常。例如:

已成功与服务器建立连接,但在登录过程中发生错误。(provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)

https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/breaking-changes


1
"DefaultConnection": "server=localhost\SQLEXPRESS;database=db;trusted_connection=true;encrypt=false" 添加 encrypt=false 解决了问题。谢谢! - charliebear240

27

升级了 Microsoft.EntityFrameworkCore.SqlServer7.0.0 后,我也遇到了同样的问题。

通过将 TrustServerCertificate=Yes 添加到 SQL Server 连接字符串中,我解决了这个问题。


1
太高兴了我找到了这个。谢谢你的发布。解决了我的连接问题。 - Eduardo Güereque

1
以下代码适用于 .NET Core 6 和 7。
> "ConnectionStrings": {
>     "SqlServer": "Data Source=DESKTOP-*****;Initial Catalog=Test;Integrated Security=True;TrustServerCertificate=Yes",
> "LocalSqlProviderEnable": true   }

0

我认为它失败是因为最近更新了。 我遇到过同样的问题,通过重新安装之前的版本(6.0.11)来解决。 希望这个评论可以帮助到你。


我也做了同样的事情,这样我就可以继续工作。我想我得等待EF Core 7的更新了。 - user3802434
2
这不是一个错误,更新也无法解决此问题,您应该升级到版本7,并禁用加密,请查看我下面的答案。 - hassane

0

看起来答案是等待 EF Core 7 的更新。这应该是一个错误。我的开发都在一台机器上,使用 SQL Server Development 版本实例。我想使用 localdb 或许可以是一种方法。


我有两个解决方案运行在同一个 SQL Server 数据库上。其中一个是使用 EF Core 7 的 ASP.NET Core 7 解决方案,没有任何问题。它使用 User Secrets 中的连接字符串。另一个是使用 EF Core Power Tools 反向工程数据库的 .NET Core 7 控制台应用程序。这个版本在连接到数据库时出现了证书链错误。我将它回滚到 EF Core 6.0.11 才能让它正常工作。我不知道这两个解决方案之间的问题是什么,但我在此记录下来。也许有人可以告诉我发生了什么事情。 - user3802434

-2
在连接字符串中添加Encrypt=False后,问题得到解决。
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=CommunicationDB;Trusted_Connection=True;MultipleActiveResultSets=True;Encrypt=False;"

请不要通过重复回答来确认答案。这已经在此答案中说过了。请投票支持有帮助的答案。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接