SQL证书链不受信任错误求助:航班预订应用登录失败
解决SQL Server证书链未受信任的连接错误(常规方案无效时)
问题重现
运行航班预订应用时触发如下错误:
Microsoft.Data.SqlClient.SqlException: '已成功与服务器建立连接,但登录过程中发生错误。(provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)'
Win32Exception: The certificate chain was issued by an authority that is not trusted.
错误触发代码行:
entities.Database.EnsureCreated();
已尝试操作:
- 修改连接字符串为:
"DefaultConnection": "Server=.\SQLEXPRESS; Database=Flights; Trusted_Connection=True; Encrypt=False; TrustServerCertificate=True;" - 确认服务器IP正确
- 手动勾选信任证书
- 配置SQL Server允许连接
但错误仍未解决。
针对性解决方案
1. 修正连接字符串的转义问题
JSON配置文件中反斜杠\需要双重转义,你的连接字符串里Server=.\SQLEXPRESS会被JSON解析错误,导致实例名称识别异常,进而触发证书错误。修正后的连接字符串:
"DefaultConnection": "Server=\\\\SQLEXPRESS; Database=Flights; Trusted_Connection=True; Encrypt=False; TrustServerCertificate=True;"
如果是web.config这类非JSON配置文件,无需转义,直接保留Server=.\SQLEXPRESS即可。
2. 检查SQL Server实例的强制加密设置
即使连接字符串指定Encrypt=False,SQL Server实例可能强制要求加密连接:
- 打开SQL Server配置管理器
- 展开SQL Server网络配置 -> 选中目标实例(如SQLEXPRESS)的协议
- 右键TCP/IP -> 属性 -> 切换到IP地址选项卡,拉至底部IPAll区域,将Force Encryption改为No
- 重启SQL Server服务生效
3. 验证EF Core上下文的连接字符串配置
确保DbContext确实使用了DefaultConnection配置项,比如在Program.cs中:
builder.Services.AddDbContext<FlightDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
若上下文硬编码了其他连接字符串,或读取的配置项名称不匹配,之前的修改将不会生效。
4. 清理应用缓存与重建项目
- 删除项目的
bin和obj文件夹,重新编译解决方案 - 重启IDE(如Visual Studio)和SQL Server服务
- 若为发布后的应用,替换发布目录下的配置文件并重启应用
5. 重新导入证书到受信任根CA
手动勾选信任可能未正确将证书加入受信任根目录:
- 打开证书管理器(Win+R输入
certmgr.msc) - 在SQL Server配置管理器的TCP/IP协议证书选项卡中找到目标证书名称
- 在证书管理器中找到该证书,右键选择所有任务 -> 导出,保存为Base64编码的X.509格式
- 将导出的证书导入到受信任的根证书颁发机构 -> 证书节点下
内容的提问来源于stack exchange,提问作者Zayne Geffre
相关产品推荐
相关产品推荐

