如果您指定 SQL Server 用于 TLS 的证书,则 SQL Server Windows 服务必须读取该证书和私钥(文件夹中的文件%ProgramData%\Microsoft\Crypto\RSA\MachineKeys
),对应证书。问题是:SQL Server 配置管理器不太舒服,它无法完成所有必需的工作.
因此,首先应该本地化 SQL Server 使用的帐户。一应该开始services.msc
,找到SQL Server服务的账户。它通常是一个内置帐户,例如Local System
, Network Service
本地或域帐户,例如.\SQLServer
, DOMAIN\SQLServerAccount
或类似的服务帐户NT Service\NT Service\MSSQL$SQL2012
如下图所示:
要向帐户授予私钥权限,可以使用 mmc 的证书管理单元。一个可以开始mmc.exe
,在“文件”菜单中选择“添加/删除管理单元”,选择“证书”管理单元,然后选择本地计算机的“计算机帐户”。然后应该选择个人存储的 SSL 证书,然后使用上下文菜单“管理私钥...”。
并添加帐户,例如NT Service\NT Service\MSSQL$SQL2012
,在上面找到,并为私钥上的帐户设置“读取”权限:
如果您想与域内的 SQL Server 建立连接(客户端和服务器都必须属于同一个 Active Directory 或通过信任连接的目录),那么应该为 SQL Server 创建 SPN。如果我正确理解您的要求,您希望允许remove通过 HTTPS 连接到 SQL Server。必须激活混合安全性才能通过 SQL Server 身份验证连接到服务器:
创建 SQL Login 后,进行上述所有更改并重新启动 SQL Server 服务,就可以建立与 SQL Server 的 TLS(加密)连接。如果在之前没有创建 SPN 的情况下尝试通过 Windows 帐户进行连接,则会出现错误:
已成功与服务器建立连接,但随后出现
登录过程中发生错误。 (提供商:SSL 提供商,
错误:0 - 目标主体名称不正确。)(Microsoft SQL
服务器,错误:-2146893022)
目标主体名称不正确
如果忘记将 Windows 身份验证更改为混合身份验证 (),则会收到类似错误
用户“OlegKi”登录失败。 (微软 SQL Server,错误:18456)
如果完成上述所有步骤,例如可以使用 SQL Management Studio 建立 TLS 连接,但仍然必须选择一些选项:
应检查“加密连接”
并设置附加连接属性TrustServerCertificate=true
通常一次使用Encrypt=true;TrustServerCertificate=true;
作为应用程序中建立与 SQL Server 的连接的连接字符串的一部分。我们设置Encrypt=true
属性通过上面描述的“加密连接”复选框。有关属性含义和选项的不同组合的更多详细信息,请参阅“启用加密”部分MSDN 文章.
如果执行了上述所有步骤并选中“加密连接”而不进行设置TrustServerCertificate=true
属性,那么就会出现错误:
已成功与服务器建立连接,但随后出现
登录过程中发生错误。 (提供商:SSL 提供商,
错误:0 - 目标主体名称不正确。)(Microsoft SQL
服务器,错误:-2146893022)
目标主体名称不正确
我已经在上面的另一种情况(与 Windows 帐户连接)中描述过。
我描述了上述所有步骤,因为配置与服务器的 TLS 连接确实不是那么容易,并且可能会出现奇怪的错误,其直接描述没有给出如何解决问题的直接提示。