![将导入的自签名 SSL 证书配置到 SQL Server Express](https://linux22.com/image/723182/%E5%B0%86%E5%AF%BC%E5%85%A5%E7%9A%84%E8%87%AA%E7%AD%BE%E5%90%8D%20SSL%20%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE%E5%88%B0%20SQL%20Server%20Express.png)
我已经创建了自签名证书并配置了 SQL Server Express。加密在我的 PC 上运行良好。
当我将证书导出到另一台电脑时,我可以正常导入,并且可以在 MMC 的个人 > 证书下看到该证书。
但是,当我尝试在新 PC 上使用 SQL Server Express 进行配置时,证书没有出现在下拉列表中。
有什么建议么?
我尝试了其他论坛上建议的一些方法
确保私钥已导出 确保证书是为本地系统(而非用户)创建的 将证书复制到受信任的证书中
我目前收到的反馈是证书 CN 值设置为在“Server1”上创建的计算机名称。当复制到另一台计算机名称不同的 PC(即“Server2”)时,此操作将不起作用。
有没有解决的办法?
答案1
SQL TLS 配置 GUI 对于下拉菜单中显示的证书非常挑剔。没错,CN 值就是它挑剔的内容之一。因此,如果 CN 与服务器名称不匹配,即使服务器名称是在主题备用名称字段中。
因此,您的第一个选择是生成一个匹配的新自签名证书并使用它。
另一个选项是绕过 GUI,而是通过注册表设置证书。注册表位置取决于所使用的 SQL 版本。我不确定 SQL Express 是否与完整版 SQL 不同。但这是完整版 SQL 2016 的位置。基本上,找到SuperSocketNetLib
您的安装/实例的密钥。
HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\SuperSocketNetLib
您还需要证书的证书指纹。您可以通过 PowerShell 找到它,如下所示。复制证书的“指纹”列中的值。
dir cert:\LocalMachine\My
现在从提升的 PowerShell 会话中使用以下命令设置指纹值并强制加密。
$regPath = 'HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\SuperSocketNetLib'
$thumbprint = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
Set-ItemProperty $regPath -Name 'Certificate' -Value $thumbprint
Set-ItemProperty $regPath -Name 'ForceEncryption' -Value 1 -Type Dword
最后,重新启动 SQL 服务以使更改生效。