SQL Server配置管理器中的下拉列表中缺少SSL证书

时间:2016-04-23 23:31:05

标签: sql-server ssl iis certificate

我正在尝试配置SQL Server 2014,以便我可以使用SSL远程连接到它。服务器上安装了有效的通配符证书,证书的域名(example.com)与服务器的FQDN(test.windows-server-test.example.com)匹配。

问题是在SQL Server配置管理器中,未列出证书,因此我无法选择它。

blank dropdown

也就是说,我被困在this MS tutorial的第2.e.2步。

8 个答案:

答案 0 :(得分:12)

在评论中进行沟通后,我可以假设您的主要问题是您使用的证书的 CN 部分。要为IIS服务器进行成功的TLS通信,就没有像SQL Server那样的强大限制。

Microsoft要求(请参阅here证书的名称必须是计算机的完全限定域名(FQDN)。这表示主题部分证书看起来像 CN = test.widows-server-test.example.com ,其中 test.widows-server-test.example.com 是您的计算机的FQDN。仅使用 CN = * .example.com 使用者替代名称,其中包含DNS Name=*.example.com和{{1},这还不够},DNS Name=test.widows-server-test.example.comDNS Name=test1.widows-server-test.example.com等等。这样的证书对于TLS是可以的,但SQL Server会丢弃它。请参阅the article,其中介绍了密切问题。

我建议您创建CN等于SQL Server FQDN的自签名证书,并验证SQL Server配置管理器是否可以看到该证书。

更新:我对Process Monitor进行了更多分析,发现Registry中的两个值对SQL Server配置管理器很重要:值DNS Name=test.widows-server-test2.example.com和{{ 1}}在键下

Hostname

如果我将DomainHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 更改为与证书的CN相对应的值,则证书将已显示在SQL Server配置管理器中。它可能不是所有问题,但它表明SQL Server需要更多的Web服务器(例如IIS)。

更新2:我再次详细检查了这个问题,我想我确实找到了如何配置你已经拥有的通用SSL证书的方式(例如免费的SSL证书来自{{3 },Let's Encrypt或其他一些)。

区分 SQL Server配置管理器与SQL Server所需配置的区别非常重要。 Configuration Manager属性的“证书”选项卡具有更多硬限制作为SQL Server。我上面仅描述了SQL Server配置管理器的限制,但可以直接在注册表中进行配置,以便使用SQL Server提供的更常见的SSL / TLS证书。我在下面描述了如何做到这一点。

Domain之类的密钥下,可以在注册表中执行哪些操作,其中部分Hostname在您的情况下可能会略有不同。 SQL Server配置管理器帮助我们在注册表中设置两个值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLibMSSQL12.SQL2014

StartSSL

ForceEncryption值是SHA1哈希值,可以通过检查证书的属性找到:

enter image description here

或证书的扩展属性,您可以通过使用Certificate看到:

enter image description here

只需要复制" Cert Hash(sha1)" value,删除所有空格并在注册表中将Certificate值作为值放置。进行设置并重新启动SQL Server Windows服务后,您将在certutil.exe -store My目录中的文件Certificate中看到类似

的行
  

2016-04-25 21:44:25.89服务器证书[Cert Hash(sha1)   " C261A7C38759A5AD96AC258B62A308A26DB525AA"]已成功加载   加密。

答案 1 :(得分:2)

我想为未来的人们添加这个,这可能会遇到我在SQL 2016 SP2和故障转移群集中遇到的类似问题。添加到注册表的证书指纹必须全部为大写。

希望这有助于下一个人。

答案 2 :(得分:1)

一旦我按照接受的答案的“更新2”部分中的步骤操作,我将无法启动SQL Server服务,并在事件查看器中得到了这些错误:

  

无法加载用户指定的证书[Cert Hash(sha1)“证书的缩略图”]。服务器将不接受连接。您应该验证证书是否正确安装。请参阅联机丛书中的“配置证书以供SSL使用”。

     

TDSSNIClient初始化失败,错误0x80092004,状态码0x80。原因:无法初始化SSL支持。找不到对象或属性。

     

TDSSNIClient初始化失败,错误0x80092004,状态码0x1。原因:初始化因基础结构错误而失败。检查以前的错误。找不到对象或属性。

SQL Server错误日志中出现错误:

  

服务器无法加载启动SSL连接所需的证书。它返回以下错误:0x8009030d。检查证书以确保它们有效。

搜索它并发现a solution

确保运行SQL Server服务的Windows帐户(在我的情况下为NT Service\MSSQLServer)对以下文件夹/注册条目具有完全权限:

  1. C:\ Program Files \ Microsoft SQL Server [您的Sql Server实例] \ MSSQL \
  2. C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys
  3. HKLM \ System \ CurrentControlSet \ Services \ WinSock2 \ Parameters

我检查了1号NT Service\MSSQLSERVER已获得许可。

我检查了2号,NT Service\MSSQLSERVER没有任何权限,并且添加了该权限。它弹出一个错误,说该文件夹中的一个文件被拒绝了,但是我只是忽略了它(我无能为力)

我没有检查3号并尝试启动SQL Server,它能正常工作!

答案 3 :(得分:0)

我使用SQL Server域帐户登录服务器(必须将该帐户临时添加到本地管理员),并将证书导入到SQL Server服务帐户的个人文件夹中。重新启动服务器,然后SQL Server可以看到证书。希望它可以帮助某人。

答案 4 :(得分:0)

另一个失败模式是密钥长度-SQL要求最小密钥长度为2048。禁用DH通道。

答案 5 :(得分:0)

我也遇到了问题,如文章here中所述,从MMC复制出来。使用certutil并将其复制到注册表值中可以很好地工作。

答案 6 :(得分:0)

我在SSRS中遇到了类似的问题,其中Microsoft Active Directory CA颁发的证书在SSRS的下拉列表中不可见。经过大量搜索,反复试验后,我可以通过以下链接对其进行修复。

https://docs.microsoft.com/en-us/archive/blogs/sqlserverfaq/can-tls-certificate-be-used-for-sql-server-encryption-on-the-wire

简述如下: 证书的主题属性必须指示公用名(CN)与服务器计算机的主机名或完全限定域名(FQDN)相同。< / p>

因此,在我们的案例中,我们建议请求证书颁发机构将主题名称更改为ABC-SQLServer.abc.local(SQL Server的FQDN),而不是abc-corp.abc.com。 更改完成后,我们再次在MMC中加载了证书,现在我们可以看到在SQL Server配置管理器中加载了证书!

希望它可以帮助遇到相同问题的人!

答案 7 :(得分:0)

即使按照上述操作,我仍然遇到问题。这是我的修复: 在证书 mmc 中右键单击证书所有任务-> 管理私有密钥。赋予服务帐号完全控制权。就我而言,我使用的是 NT Service\MSSQL$