在使用EF Core连接SQL Server数据库时,如果数据库服务端没有配置有效的SSL证书,或者我们在开发测试环境希望使用未加密的连接字符串,就需要正确配置TrustServerCertificate参数,否则很容易出现连接失败的问题。

TrustServerCertificate的作用
TrustServerCertificate是SQL Server连接字符串中的一个参数,用于控制客户端是否信任服务端的SSL证书。当该参数设置为true时,客户端会跳过服务端证书的验证流程,即使证书无效或者不存在,也会允许建立连接,这通常用于开发测试环境,避免因为证书问题阻碍开发进度。
需要注意的是,生产环境不建议开启这个参数,因为跳过证书验证会让连接存在安全风险,容易被中间人攻击。
未加密连接字符串的配置方式
1. 在DbContext中直接配置
我们可以在DbContext的OnConfiguring方法中直接拼接包含TrustServerCertificate的连接字符串,示例如下:
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
// 配置未加密连接字符串,TrustServerCertificate设为true跳过证书验证
string connectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=123456;TrustServerCertificate=true;";
optionsBuilder.UseSqlServer(connectionString);
}
}
}
2. 从配置文件读取连接字符串
实际项目中我们通常会把连接字符串放在appsettings.json中,配置方式如下:
首先修改appsettings.json文件,添加连接字符串配置:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=TestDB;User Id=sa;Password=123456;TrustServerCertificate=true;"
}
}
然后在DbContext中读取配置:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
public class AppDbContext : DbContext
{
private readonly IConfiguration _configuration;
public AppDbContext(IConfiguration configuration)
{
_configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
string connectionString = _configuration.GetConnectionString("DefaultConnection");
optionsBuilder.UseSqlServer(connectionString);
}
}
}
常见问题说明
- 如果设置TrustServerCertificate=true后仍然连接失败,需要检查连接字符串中是否有其他加密相关参数,比如Encrypt=true,如果存在需要把Encrypt设为false,或者删除该参数。
- 连接字符串中的参数不区分大小写,TrustServerCertificate和trustservercertificate效果一致。
- 如果是使用Azure SQL Database或者其他云数据库,不建议开启TrustServerCertificate,云数据库通常都配置了有效的证书,直接关闭证书验证会带来安全风险。
配置参数对照表
| 参数名 | 可选值 | 作用说明 |
|---|---|---|
| TrustServerCertificate | true/false | 是否跳过服务端SSL证书验证,true为跳过,false为需要验证有效证书 |
| Encrypt | true/false | 是否启用连接加密,true为启用加密,false为不加密 |
| Server | 数据库地址 | SQL Server实例的地址,可以是IP或者域名 |
| Database | 数据库名称 | 要连接的具体数据库名 |
EF CoreTrustServerCertificate连接字符串SQL Server修改时间:2026-07-18 15:39:19