我有一个使用 SQL Server 2019 的 ASP.NET Core 9 Web API 项目,连接字符串在
appsettings.json
中定义,如下所示:
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Data Source = .; initial Catalog = serverAPI9; Trusted_Connection = true" }
}
此外,连接是在
Program.cs
中配置的,如下所示:
builder.Services.AddDbContext<DataContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});
执行
POST
操作时,_context.SaveChangesAsync();
方法会抛出以下错误:
Microsoft.Data.SqlClient.SqlException (0x80131904):已成功与服务器建立连接,但在登录过程中发生错误。 (提供商:SSL 提供商,错误:0 - 证书链由不受信任的机构颁发。)
System.ComponentModel.Win32Exception (0x80090325):证书链是由不受信任的机构颁发的。
如何解决这个问题?
这是 .NET 7 次的重大更改 - 对于 SQL Server 连接,
Encrypt
默认为 true
:
SqlClient 连接字符串默认使用
。这意味着:Encrypt=True
- 服务器必须配置有效的证书
- 客户端必须信任此证书
来自文档的缓解措施部分:
可通过三种方式进行:
- 在服务器上安装有效的证书。请注意,这是一个复杂的过程,需要获取证书并确保它由客户端信任的机构签名。
- 如果服务器有证书,但客户端不信任它,则
允许绕过正常的信任机制。TrustServerCertificate=True
- 将
显式添加到连接字符串。Encrypt=False