SQL Server SSL 连接 - 我错过了什么?

Ral*_*lph 4 sql-server-2008-r2 ssl

我正在尝试设置我的 SQL Server 2008 R2 实例,以便它只接受 SSL 连接。我的理解是,一旦设置完成,任何客户端计算机都需要安装证书才能连接。

我已按照http://msdn.microsoft.com/en-us/library/ms191192(v=sql.105).aspx上的说明进行操作,并在许多其他站点上进行了大量阅读。我创建了一个证书,在 SQL Server 配置管理器(网络配置/协议/属性)中选择了它,并将“强制加密”设置为 true。我重新启动了运行我的实例的服务。

完成所有这些之后,当我尝试远程连接到我的实例时,我成功了。通常我喜欢成功,但在这种情况下,我没有安装我的开发机器可以识别的证书(这是我的实例所在的位置),当我查看连接属性时,它说连接没有加密。如果我选择尝试来自客户端的加密连接(在连接框中的 SQL Server Management Studio 的选项中选择此选项),则会出现我期望的证书问题。

所以我的问题是:如果事情设置正确,来自客户端的连接应该会失败(因为它缺少适当的证书),而我不必在客户端上配置任何东西,这是否正确?有什么明显的东西我可能会遗漏吗?也许是我必须更改属性的其他地方?我希望以前做过这件事的人会有一些想法。

顺便说一下,在创建我的证书时,我遵循了http://thesqldude.com/tag/makecert/ 上的SQL Dude 的说明。证书的名称是我的开发机器的完全限定域名。

Edw*_*and 6

请注意,当您在服务器端强制加密时,连接将使用 ssl 进行加密。您可以为此使用任何证书。您的连接将被加密,但是客户端不会检查 SQL Server 的身份是否实际上有效。如果没有这个检查,你可能会被中间攻击的人打开。

如果您在客户端选择强制加密,则会执行完整的有效性检查。这样不仅连接被加密,客户端也知道它所连接的服务器实际上是证书中提到的服务器,因为它可以相信证书没有被篡改。

为此,SQL Server 上使用的证书必须由客户端信任的证书颁发机构颁发。这可以是任何众所周知的证书颁发机构,或者例如当您在该域中有一个 Windows 域和一个 CA 时,您可以让该 CA 颁发一个。然后,您必须将该 CA 的根证书导入所有客户端,这也将起作用。

要检查您的连接是否已加密,请使用以下命令:

SELECT session_id,encrypt_option
FROM sys.dm_exec_connections
Run Code Online (Sandbox Code Playgroud)