.NET 6升级至.NET 7后数据库连接失败问题求助
问题重现
将应用从.NET 6升级到.NET 7后,执行数据库连接代码时出现错误:
连接字符串:
"ConnectionStrings": { "DefaultConnection": "Server=.\\MYINSTANCE;Database=MyDatabase;User Id=MyUser; Password=MyPassoword;MultipleActiveResultSets=True;" }
连接代码:
var connectionString = _configuration.GetConnectionString("DefaultConnection"); var connection = new SqlConnection(connectionString); connection.Open();
错误信息:
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
---> System.ComponentModel.Win32Exception (0x80090325): The certificate chain was issued by an authority that is not trusted.
原因
.NET 7对Microsoft.Data.SqlClient的默认配置做了变更:默认启用SSL加密(Encrypt=True),而.NET 6及更早版本的默认值为Encrypt=False。如果你的SQL Server使用自签名证书、内部CA签发但未被客户端信任的证书,就会触发证书链信任验证失败的错误。
解决办法
1. 临时关闭SSL加密(开发环境适用)
在连接字符串中添加Encrypt=False参数:
"DefaultConnection": "Server=.\\MYINSTANCE;Database=MyDatabase;User Id=MyUser; Password=MyPassoword;MultipleActiveResultSets=True;Encrypt=False;"
2. 信任SQL Server的证书(生产环境推荐)
将SQL Server使用的证书导入到客户端机器的受信任根证书颁发机构存储:
- 从SQL Server服务器导出证书(仅需公钥)
- 在客户端打开
certmgr.msc,找到「受信任的根证书颁发机构」→「证书」,右键导入导出的证书
3. 跳过证书验证(仅测试/开发环境)
在连接字符串中添加TrustServerCertificate=True参数,该参数会绕过证书链信任验证,但存在安全风险,不建议生产环境使用:
"DefaultConnection": "Server=.\\MYINSTANCE;Database=MyDatabase;User Id=MyUser; Password=MyPassoword;MultipleActiveResultSets=True;TrustServerCertificate=True;"
内容的提问来源于stack exchange,提问作者3xGuy

