代码之家  ›  专栏  ›  技术社区  ›  Jonah

SQL Server Configuration Manager中的下拉列表中缺少SSL证书

  •  27
  • Jonah  · 技术社区  · 9 年前

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

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

    blank dropdown

    也就是说,我被困在步骤2.e.2中 this MS tutorial .

    10 回复  |  直到 9 年前
        1
  •  28
  •   Oleg    9 年前

    在评论中沟通之后,我可以认为你的主要问题是 中国 您使用的证书的一部分。要使IIS Server的TLS通信成功,就没有像SQL Server那样的严格限制。

    Microsoft要求(请参阅 here )那个 证书的名称必须是计算机的完全限定域名(FQDN)。 这意味着 主题 证书的一部分看起来像 CN=test.windows-server-test.example.com 哪里 test.windows-server-test.example.com 是计算机的FQDN。举例来说,这是不够的 CN=*.example.com 主题备选名称 ,其中包含 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将丢弃它。看见 the article ,描述了密切的问题。

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

    已更新 :我进一步分析了有关Process Monitor的问题,发现注册表中的两个值对SQL Server Configuration Manager很重要: Hostname Domain 在钥匙下面

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    

    如果我改变 领域 主机名 对应证书CN的值,则证书将已显示在SQL Server配置管理器中。这可能不是所有的问题,但它表明SQLServer需要更多的web服务器(例如IIS)。

    更新2: 我再次详细检查了这个问题,我认为我找到了如何配置您已经拥有的通用SSL证书的方法(例如,从 Let's Encrypt , StartSSL 或一些其它)。

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

    一个人需要做的事情可以在注册表项下进行,如 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLib ,其中零件 MSSQL12.SQL2014 在你的情况下可能会有点不同。SQL Server Configuration Manager帮助我们在注册表中设置两个值: ForceEncryption Certificate :

    enter image description here

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

    enter image description here

    或证书的扩展属性,您可以通过用法查看这些属性 certutil.exe -store My :

    enter image description here

    只需复制“Cert Hash(sha1)”值,删除所有空格并将其作为 证明书 注册表中的值。进行设置并重新启动SQL Server windows服务后,将在文件中看到 ERRORLOG 在里面 C:\Program Files\Microsoft SQL Server\...\MSSQL\Log 目录行,如

    2016-04-25 21:44:25.89服务器证书〔证书哈希(sha1) “C261A7C38759A5AD96AC258B62A308A26DB525AA”]已成功加载 用于加密。

        2
  •  5
  •   Joe Mroczek    7 年前

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

    希望这能帮助下一个人。

        3
  •  2
  •   Community CDub    5 年前

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

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

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

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

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

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

    在谷歌上搜索并发现 a solution :

    确保windows帐户运行SQL Server服务( 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(HKLM\系统\当前控制集\服务\ WinSock2 \参数)

    我查了1号 NT Service\MSSQLSERVER 已拥有权限。

    我查了2号, NT服务\MSSQLSERVER 没有权限,我添加了权限。它弹出一个错误,说该文件夹中的一个文件被拒绝操作,但我忽略了它(我无能为力)

    我没有检查3号,并尝试启动SQL Server,它成功了!!

        4
  •  1
  •   Thrupthi    4 年前

    我在SSRS中遇到了类似的问题,其中微软active directory CA颁发的证书在SSRS的下拉列表中不可见。经过多次搜索、反复尝试,我可以通过以下链接修复它。

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

    简介如下: 这个 主题 属性必须指示公用名(CN)与主机名或 完全限定域名(FQDN) 服务器计算机的。

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

    希望它能帮助面临同样问题的人!

        5
  •  1
  •   user15463676    4 年前

    即使遵循了上述步骤,我仍然有问题。这是我的解决方案: 在证书mmc中右键单击证书“所有任务”->管理Pricate密钥。让服务帐户完全控制。在我的情况下,我使用的是NT Service\MSSQL$

        6
  •  0
  •   Mary Nobakht    6 年前

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

        7
  •  0
  •   user2702772    6 年前

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

        8
  •  0
  •   double-beep hudson solomon    5 年前

    我还遇到了一个从MMC复制的问题,这在本文中有详细介绍 here 。使用certutil并将其复制到注册表值中效果很好。

        9
  •  0
  •   Jeremy Caney Abloin    3 年前

    我的问题是 Certificate Store 是为 WebHosting ,但要在SSRS中查看证书,它必须是个人的。

    IIS Server Certificate list example

        10
  •  -1
  •   László Kiss    3 年前

    注册表编辑器中的证书使用大写LOL 配置管理器中仍未显示,但TLS适用于SQL连接。