使用ODBC Driver 18连接SSL模式SQL Server时遇主体名称错误
排查ODBC Driver 18连接SQL Server SSL时的"The target principal name is incorrect"错误
错误原因分析
这个错误核心是SSL握手阶段,客户端验证服务器证书的主体名称(Principal Name)与实际连接的服务器标识不匹配,常见触发场景包括:
- 证书的
Subject或Subject Alternative Name (SAN)字段未包含客户端连接时使用的服务器地址(如主机名、FQDN、IP) - 客户端连接字符串指定的服务器名称与证书内的标识完全不一致
- SQL Server实际加载的证书并非你部署的目标证书,导致主体验证失败
解决方法
1. 校验证书主体与连接标识的匹配性
- 在SQL Server机器上打开
certlm.msc(本地计算机证书管理器),找到部署在个人>证书下的SQL Server证书,查看主题和使用者备用名称字段,确认其中包含你连接时使用的服务器地址(比如用IP连接则SAN需包含该IP,用FQDN则需对应域名) - 客户端连接时必须使用与证书标识完全一致的地址,例如证书内是
sql-prod-01.company.com,就不能用sql-prod-01或IP发起连接
2. 确认SQL Server证书配置正确性
- 打开SQL Server配置管理器,展开
SQL Server网络配置>[实例名]的协议,右键选择属性切换到证书标签,确认选中的证书是你部署的目标证书(主体名称与之前校验的一致) - 若证书未正确选中,重新选择后重启SQL Server服务
3. 临时调试用连接字符串调整(生产环境不推荐)
若仅需快速验证连接逻辑,可在ODBC连接字符串中添加TrustServerCertificate=Yes跳过主体名称验证,但该参数会降低SSL安全性,仅用于排查:
Driver={ODBC Driver 18 for SQL Server};Server=your-server-identity;Database=your-db;Uid=your-account;Pwd=your-password;Encrypt=Yes;TrustServerCertificate=Yes
4. 确认根CA证书的客户端部署
客户端机器需将根CA证书导入到受信任的根证书颁发机构(通过certmgr.msc操作),否则客户端无法信任服务器证书,也会触发类似验证错误
适用于SQL Server的自签名SSL证书创建参考步骤
以下流程使用PowerShell完成,可生成符合SQL Server要求的证书:
- 创建根CA证书:
$rootCA = New-SelfSignedCertificate -Type Custom -KeySpec Signature ` -Subject "CN=SQL Server Root CA" -KeyExportPolicy Exportable ` -HashAlgorithm sha256 -KeyLength 2048 ` -CertStoreLocation "Cert:\LocalMachine\My" ` -KeyUsageProperty Sign -KeyUsage CertSign, CRLSign
- 导出根CA证书为PFX文件,用于客户端部署:
Export-PfxCertificate -Cert $rootCA -FilePath "C:\temp\SQLRootCA.pfx" -Password (ConvertTo-SecureString "YourStrongPassword" -AsPlainText -Force)
- 创建绑定服务器标识的服务器证书(替换示例中的域名/IP为实际值):
$serverCert = New-SelfSignedCertificate -Type Custom -DnsName "sql-prod-01", "sql-prod-01.company.com", "10.0.0.50" ` -Subject "CN=sql-prod-01.company.com" -KeyExportPolicy Exportable ` -HashAlgorithm sha256 -KeyLength 2048 ` -CertStoreLocation "Cert:\LocalMachine\My" ` -Signer $rootCA -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1")
- 导出服务器证书后,导入到SQL Server所在机器的
LocalMachine\个人证书存储,再通过SQL Server配置管理器完成绑定
内容的提问来源于stack exchange,提问作者SreedharP
相关产品推荐
相关产品推荐

