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

如何修复Microsoft.Data.SqlClient 4.0.0版本中的「目标主体名称不正确」错误

解决Microsoft.Data.SqlClient 4.0.0 SSL目标主体名错误的实用方案

我刚看到你升级到Microsoft.Data.SqlClient 4.0.0后遇到的这个棘手问题——明明设置了Encrypt=False,还是弹出「已成功与服务器建立连接,但在登录过程中发生错误。(provider: SSL Provider, error: 0 - The target principal name is incorrect)」的SSL错误,回退到2.0.1就恢复正常。结合4.0版本的加密逻辑变更,我整理了几个能帮你在4.0.0版本下解决问题的方法:

1. 搭配TrustServerCertificate=True一起设置

从4.0.0开始,SqlClient的加密校验逻辑更严格了:哪怕你设置了Encrypt=False,如果SQL Server返回了SSL证书,客户端还是会默认验证证书的主体名。这时候得显式加上TrustServerCertificate=True来跳过这个验证,修改后的连接字符串示例如下:

Server=你的服务器地址;Database=目标数据库;User Id=登录账号;Password=登录密码;Encrypt=False;TrustServerCertificate=True;

2. 确认服务器名称与证书主体名完全匹配

如果你的SQL Server确实配置了合法的SSL证书,哪怕Encrypt=False,某些场景下客户端还是会做基础的证书校验。一定要保证连接字符串里写的服务器名称(比如用主机名还是IP)和证书上的主体名完全一致——比如证书上是sql-prod.yourdomain.com,就不能只写sql-prod。

3. 检查系统级的强制加密设置

有些环境里,注册表或者组策略可能开启了「Force Protocol Encryption」(强制协议加密),这个设置会直接覆盖你连接字符串里的Encrypt=False配置。你可以去检查一下对应注册表项:

  • 针对32位应用:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNI10.0\ForceProtocolEncryption
  • 针对64位应用:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI10.0\ForceProtocolEncryption
    如果该键值为1,改成0后重启应用即可生效。

4. 升级到4.0.0之后的稳定版本

4.0.0作为大版本更新,确实存在一些SSL相关的兼容性小问题,后续发布的4.1.0及以上版本已经修复了不少这类场景。如果上面的方法都没效果,试试升级到最新的稳定版,说不定问题直接就消失了。

补充说明

回退到2.0.1版本能解决问题的原因是:旧版本的加密参数逻辑更宽松,Encrypt=False会直接跳过大部分证书校验环节;而4.0.0版本遵循了更严格的TLS规范,所以需要调整参数来适配你的环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:50:35