You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET7 SQL连接字符串加密故障:目标主体名称不正确

问题描述
  • 环境:.NET 7应用部署在搭载MSSQL的Windows Server 2019服务器上,站点与数据库同服务器
  • 升级背景:从.NET Core 3.1升级至.NET 7后,出现SQL强制加密相关问题
  • 核心现象:
    • 开发环境中添加Trust server certificate=True或Encrypt=false可解决强制加密问题,但服务器端无效
    • 已配置SQL证书及权限,但服务器未使用匹配子域名的FQDN(仅有机房名),连接字符串中设置Trust Server Certificate=true仍报错「目标主体名称不正确」
    • SSMS测试验证:仅勾选「Encrypt connection」触发主体名称错误,同时勾选「Trust server certificate」可成功连接
    • 连接字符串:"Data Source=STERP\SQLEXPRESS;Initial Catalog=CBooking;Integrated Security=True;Trust Server Certificate=true",尝试过多种写法(空格、大小写等)均无效,升级前无该参数的连接字符串可正常使用
  • 当前临时处理:管理员无法解决后,决定降级到.NET 7之前未强制加密的版本,待该版本停止支持后再处理
解决方案

针对同服务器部署、不在意通信加密的场景,可尝试以下几种可行方案:

1. 显式设置Encrypt=false

.NET 7默认加密行为已从Encrypt=false变更为Encrypt=true,即使同服务器连接也会触发加密检查。直接在连接字符串中显式添加该参数:

"Data Source=STERP\SQLEXPRESS;Initial Catalog=CBooking;Integrated Security=True;Encrypt=false"

2. 使用本地环回地址作为数据源

由于站点与数据库同服务器,将Data Source改为localhost\SQLEXPRESS或127.0.0.1\SQLEXPRESS,配合Trust Server Certificate=true使用:

"Data Source=localhost\SQLEXPRESS;Initial Catalog=CBooking;Integrated Security=True;Trust Server Certificate=true"

使用本地环回地址时,SQL Server会绕过证书主体名称的严格匹配,避免「目标主体名称不正确」的错误。

3. 全局覆盖.NET的SQL加密配置

在应用配置或启动代码中全局关闭SQL连接加密:

  • 方式1:在appsettings.json中添加配置
{
  "ConnectionStrings": {
    "CBooking": "Data Source=STERP\SQLEXPRESS;Initial Catalog=CBooking;Integrated Security=True"
  },
  "System.Data.SqlClient": {
    "Encrypt": false
  }
}
  • 方式2:在Program.cs启动代码中添加开关
AppContext.SetSwitch("Switch.System.Data.SqlClient.Encrypt", false);

4. 适配证书主体名称(长期方案)

若后续需保留.NET 7版本,可让管理员重新生成SQL Server证书,确保证书的主体名称或SAN(主题备用名称)包含服务器当前使用的机房名/NetBIOS名称,配置完成后重启SQL Server服务再测试连接。

内容的提问来源于stack exchange,提问作者Ego Placebo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:30:54