绑定Let's Encrypt通配符证书后SQL Server仍报证书链不受信任错误
证书链不受信任问题的原因与解决办法
核心原因分析
- 系统未信任Let's Encrypt根证书:Let's Encrypt的根证书(ISRG Root X1/X2)未在本地计算机的「受信任根证书颁发机构」存储中,导致系统无法验证证书链的合法性。
- SQL Server证书配置有误:
- 通配符证书的域名与SQL Server的完全限定域名(FQDN)不匹配,比如SQL Server是
sql.example.com,但证书是*.example.net,会触发验证失败。 - 证书缺少「服务器身份验证」的增强密钥用法(EKU),SQL Server要求TLS证书必须具备这个用途标识。
- 证书未安装在本地计算机的「个人」存储,或者SQL Server服务账号没有该证书的读取权限。
- 通配符证书的域名与SQL Server的完全限定域名(FQDN)不匹配,比如SQL Server是
- 证书链不完整:只安装了Let's Encrypt的叶证书,未配置对应的中间证书(如R3),导致无法追溯到受信任的根证书。
- 连接字符串配置错误:
- 未明确指定
Encrypt=true(新版SQL驱动默认使用Encrypt=Strict模式),或使用IP/短名连接,导致证书域名验证不通过。
- 未明确指定
分步解决方法
- 安装并信任Let's Encrypt根证书
打开certlm.msc(本地计算机证书管理器),检查「受信任根证书颁发机构」下是否有ISRG Root X1或ISRG Root X2。若没有,将对应根证书导入到该存储目录。 - 验证SQL Server证书配置
- 打开SQL Server配置管理器,展开「SQL Server网络配置」→ 目标实例的「协议」→ 右键「属性」→「证书」选项卡,确认绑定的是正确的Let's Encrypt通配符证书。
- 查看证书详情:确认「使用者替代名称」包含SQL Server的FQDN,「增强密钥用法」里有「服务器身份验证(1.3.6.1.5.5.7.3.1)」。
- 给SQL Server服务账号授权:右键证书→「所有任务」→「管理私钥」,添加SQL Server的运行账号,授予「读取」权限。
- 补全中间证书
获取Let's Encrypt对应的中间证书(如R3),导入到本地计算机的「中级证书颁发机构」存储中。 - 修正PowerShell连接字符串
使用SQL Server的FQDN进行连接,并明确指定加密参数,示例:$connStr = "Server=sql.example.com;Database=TargetDB;User ID=YourAccount;Password=YourPass;Encrypt=true" $conn = New-Object System.Data.SqlClient.SqlConnection($connStr) $conn.Open()
内容的提问来源于stack exchange,提问作者Harsh
相关产品推荐
相关产品推荐

