我正在尝试配置SQL Server 2014以便可以使用SSL远程连接。服务器上安装了一个有效的通配符证书,该证书的域名(example.com)与服务器的FQDN(test.windows-server-test.example.com)相匹配。
问题是在SQL Server配置管理器中,证书未列出,因此我无法选择它。
也就是说,我卡在了这个微软教程的第2.e.2步骤上。
我正在尝试配置SQL Server 2014以便可以使用SSL远程连接。服务器上安装了一个有效的通配符证书,该证书的域名(example.com)与服务器的FQDN(test.windows-server-test.example.com)相匹配。
问题是在SQL Server配置管理器中,证书未列出,因此我无法选择它。
也就是说,我卡在了这个微软教程的第2.e.2步骤上。
DNS Name=*.example.com
、DNS Name=test.widows-server-test.example.com
、DNS Name=test1.widows-server-test.example.com
、DNS Name=test.widows-server-test2.example.com
等。这样的证书对于TLS来说是可以的,但是SQL Server会将其丢弃。请参见描述相关问题的文章。Hostname
和Domain
的值在以下密钥下:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
如果我将Domain
和Hostname
更改为与证书CN相对应的值,则该证书将已在SQL Server配置管理器中显示。这可能不是所有问题,但它表明SQL Server需要更多作为Web服务器(例如IIS)。
更新2:我再次详细研究了一下问题,我认为我找到了一种方法可以配置您已经拥有的常见SSL证书(例如来自Let's Encrypt,StartSSL或其他某些类型的免费SSL证书)。
重要的是要区分SQL Server配置管理器所执行的操作与SQL Server所需的配置。配置管理器属性的证书选项卡具有比SQL Server更严格的限制。上面我描述了SQL Server配置管理器的限制,但是可以直接在注册表中进行配置以使用更常见的SSL / TLS证书通过SQL Server。下面我将介绍如何做到这一点。
要完成此操作,您需要在注册表中的一个键下,例如HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLib
,其中MSSQL12.SQL2014
部分在您的情况下可能略有不同。 SQL Server配置管理器帮助我们在注册表中设置两个值:ForceEncryption
和Certificate
:
Certificate
值是可以通过检查证书属性找到的SHA1哈希值:
或者是证书的扩展属性,您可以通过使用certutil.exe -store My
来查看它们:
您只需要复制“Cert Hash(sha1)”值,删除所有空格,并将其放置为注册表中Certificate
值的值。进行设置并重新启动SQL Server Windows服务后,您将在C:\ Program Files \ Microsoft SQL Server \ ... \ MSSQL \ Log
目录中的ERRORLOG
文件中看到类似于以下行:
2016-04-25 21:44:25.89 Server 证书[Cert Hash(sha1) "C261A7C38759A5AD96AC258B62A308A26DB525AA"]已成功加载以进行加密。
即使按照上述步骤进行操作,我仍然遇到了问题。以下是我的解决方法:在证书管理控制台中,右键单击证书,选择“所有任务” -> “管理私钥”。将服务账户设为完全控制权限。在我的情况下,我正在使用NT Service\MSSQL$。
NT Service\MSSQLServer
)对以下文件夹/注册表项具有完全权限:NT Service\MSSQLSERVER
已经拥有权限。NT Service\MSSQLSERVER
没有权限,我添加了权限。它弹出一个错误,说该文件夹中的一个文件被拒绝操作,但我只是忽略了它(别无选择)。我在SSRS中遇到了类似的问题,微软活动目录CA颁发的证书在SSRS下拉菜单中不可见。经过大量搜索、试验和错误,我通过遵循这个链接解决了这个问题。
下面是简要内容概述: 证书的Subject属性必须表明通用名称(CN)与服务器计算机的主机名或完全限定域名(FQDN)相同。SQL Server 2019
我发现证书指纹必须以小写形式输入到证书注册表键中,Configuration Manager才能看到它。
SQL Server将读取注册表值并使用它,无论注册表键是大写还是小写。但是,只有当它以小写形式出现时,配置管理器才会显示它。
我使用SQL Server域帐户登录服务器(必须将该帐户暂时添加到本地管理员组),并将证书导入SQL Server服务帐户的个人文件夹中。重启服务器,然后SQL Server就可以看到证书了。希望对某些人有所帮助。
AT_SIGNATURE
而不是AT_KEYEXCHANGE
。您可以使用certutil.exe -dump -v My.pfx
命令检查PFX文件,并搜索KeySpec = 1 -- AT_KEYEXCHANGE
。如果需要,在删除证书之前将其导出为PFX文件。然后,您可以使用certutil.exe -v -importPFX My.pfx AT_KEYEXCHANGE
命令再次导入证书。 - Oleg*.example.com
,计算机名称为test.widows-server-test.example.com
。这是你的意思吗? - Jonah