我正在尝试配置SQL Server 2014,以便我可以使用SSL远程连接到它。服务器上安装了有效的通配符证书,证书的域名(example.com)与服务器的FQDN(test.windows-server-test.example.com)匹配。
问题是在SQL Server配置管理器中,未列出证书,因此我无法选择它。
也就是说,我被困在this MS tutorial的第2.e.2步。
答案 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.com
,DNS 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
如果我将Domain
和HKEY_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\SuperSocketNetLib
和MSSQL12.SQL2014
:
ForceEncryption
值是SHA1哈希值,可以通过检查证书的属性找到:
或证书的扩展属性,您可以通过使用Certificate
看到:
只需要复制" 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号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的下拉列表中不可见。经过大量搜索,反复试验后,我可以通过以下链接对其进行修复。
简述如下: 证书的主题属性必须指示公用名(CN)与服务器计算机的主机名或完全限定域名(FQDN)相同。< / p>
因此,在我们的案例中,我们建议请求证书颁发机构将主题名称更改为ABC-SQLServer.abc.local(SQL Server的FQDN),而不是abc-corp.abc.com。 更改完成后,我们再次在MMC中加载了证书,现在我们可以看到在SQL Server配置管理器中加载了证书!
希望它可以帮助遇到相同问题的人!
答案 7 :(得分:0)
即使按照上述操作,我仍然遇到问题。这是我的修复: 在证书 mmc 中右键单击证书所有任务-> 管理私有密钥。赋予服务帐号完全控制权。就我而言,我使用的是 NT Service\MSSQL$