如何授予SQL Server读取SSL密钥的权限?

时间:2016-04-25 00:19:23

标签: sql-server windows-services

我最近在SQL Server 2014中创建了一个自签名证书并启用了加密:

self signed cert

问题是现在SQL Server服务无法启动:

startup error

2010年的

This article将问题标识为权限问题:SQL Server服务没有读取SSL证书私钥的必要权限。

问题在于我被困在文章中提出的解决方案的第4步:

stuck on step 4

当我打开文章中显示的窗口时,没有与建议格式匹配的组或用户名。

我是否有另一种方法可以确定运行SQL Server服务的帐户,以便我可以授予其读取SSL证书的权限?

也欢迎完全不同的解决方案。

2 个答案:

答案 0 :(得分:2)

如果指定了SQL Server应该用于TLS的证书,则SQL Server Windows服务必须读取证书和私钥(文件夹{{1}中的文件}}),对应证书。问题是: SQL Server配置管理器不舒服,并且不能完成所有必需的工作

因此,首先应该本地化SQL Server使用的帐户。应该启动%ProgramData%\Microsoft\Crypto\RSA\MachineKeys,找到SQL Server服务的帐户。它通常是内置帐户,如services.mscLocal System本地或域帐户,如Network Service.\SQLServer或服务帐户,如DOMAIN\SQLServerAccount在下图中:

enter image description here

要授予帐户私钥的权限,可以使用mmc的证书管理单元。可以启动NT Service\NT Service\MSSQL$SQL2012,选择"添加/删除管理单元"在"文件"菜单,选择"证书"管理单元并选择"计算机帐户"本地计算机。然后应该选择个人商店的SSL证书,然后使用上下文菜单"管理私钥..."。

enter image description here

并添加上述mms.exe之类的帐户,并设置" Read"私钥上帐户的权限:

enter image description here

如果您想建立与域内SQL服务器的连接(客户端和服务器都必须属于同一个Active Directory或通过信任连接的目录),那么应该为此创建SPN。 SQL服务器。如果我正确理解您的要求,您希望通过HTTPS允许删除与SQL Server的连接。必须激活混合安全性才能通过SQL Server身份验证连接到服务器:

enter image description here

创建SQL登录后,进行上述所有更改并重新启动SQL Server服务后,将能够建立与SQL Server的TLS(加密)连接。如果尝试通过Windows帐户连接而不创建SPN,则会收到错误:

  

已成功与服务器建立连接,但随后成功建立了连接   登录过程中发生错误。 (提供者:SSL提供商,   错误:0 - 目标主体名称不正确。)(Microsoft SQL   服务器,错误:-2146893022)

     

目标主体名称不正确

enter image description here

如果忘记将Windows身份验证更改为混合身份验证(),则会收到类似

的错误
  

用户' OlegKi&#39>登录失败。 (Microsoft SQL Server,错误:18456)

enter image description here

如果完成上述所有步骤,可以使用SQL Management Studio建立TLS连接,但仍需要选择一些选项:

enter image description here

应该检查"加密连接"

enter image description here

并设置其他连接属性NT Service\NT Service\MSSQL$SQL2012

通常一次使用TrustServerCertificate=true作为连接到SQL Server的连接的应用程序中的连接字符串的一部分。我们通过复选框"加密连接"设置Encrypt=true;TrustServerCertificate=true;属性。如上所述。有关属性含义的详细信息以及选项的不同组合可以在"启用加密" the MSDN article的一部分。

如果执行上述所有步骤并检查"加密连接"如果没有设置Encrypt=true属性,则会收到错误:

  

已成功与服务器建立连接,但随后成功建立了连接   登录过程中发生错误。 (提供者:SSL提供商,   错误:0 - 目标主体名称不正确。)(Microsoft SQL   服务器,错误:-2146893022)

     

目标主体名称不正确

enter image description here

我在上面已经描述了另一种情况(与Windows帐户的连接)。

我描述了上述所有步骤,因为配置到服务器的TLS连接实际上并不那么容易,并且可能会出现奇怪的错误,直接描述没有直接提示如何解决问题。

答案 1 :(得分:1)

另一个注意事项:如果要通过从证书管理器复制和粘贴手动将证书指纹输入到注册表中,则必须删除前导字符。它是一个不可见的unicode字符,但如果它存在,它将导致SQL Server服务无法启动。除此之外,还要将其设为ALL CAPS,并删除所有空格。

相关问题