加密与 SQL Server 的连接

SQL Server 支持安全套接字层 (SSL),并且与 Internet 协议安全 (IPSec) 兼容。

安全套接字层 (SSL)

Microsoft SQL Server 可以使用安全套接字层 (SSL) 对通过网络在 SQL Server 实例与客户端应用程序之间传输的数据进行加密。SSL 加密在协议层执行,并可用于除 DB Library 和 MDAC 2.53 客户端以外的所有 SQL Server 客户端。

客户端连接请求加密时,SSL 可用于服务器验证。如果 SQL Server 实例在分配由公共证书颁发机构颁发的证书的计算机上运行,则计算机的标识和 SQL Server 实例的标识由受信任根颁发机构的证书链担保。这种服务器验证要求将运行客户端应用程序的计算机配置为信任服务器所用的证书的根颁发机构。也可以使用带有自签名的证书进行加密,如下一部分所述,但是自签名证书只能提供有限的保护。

SSL 使用的加密级别是 40 位还是 128 位,取决于应用程序和数据库计算机上运行的 Microsoft Windows 操作系统版本。

启用 SSL 加密将增强在 SQL Server 实例与应用程序之间通过网络传输的数据的安全性。但是,启用加密的确会降低性能。SQL Server 与客户端应用程序之间的所有通信流量都使用 SSL 加密时,还需要进行以下额外处理:

  • 连接时需要进行额外的网络往返。

  • 从应用程序发送到 SQL Server 实例的数据包必须由客户端网络库加密并由服务器端网络库解密。

  • 从 SQL Server 实例发送到应用程序的数据包必须由服务器端网络库加密并由客户端网络库解密。

配置 SQL Server 的 SSL

以下过程说明如何为 SQL Server 配置 SSL。

配置 SSL

  1. 在服务器的 Windows 证书存储区中安装一个证书。

  2. 单击**“开始”,在 Microsoft SQL Server 程序组中,指向“配置工具”,再单击“SQL Server 配置管理器”**。

  3. 展开**“SQL Server 网络配置”,右键单击所需的服务器协议,再单击“属性”**。

    注意注意

    这是工具左侧窗格中的“<instance_name> 的协议”部分,而不是右侧窗格中的具体协议。

  4. 在**“证书”**选项卡上,配置数据库引擎以使用该证书。

  5. 在**“标志”**选项卡上,查看或指定协议加密选项。应始终对登录数据包进行加密。

    • 如果数据库引擎的 ForceEncryption 选项设置为**“是”**,则将加密所有客户端/服务器通信,并且拒绝无法支持加密的客户端的访问。

    • 如果数据库引擎的 ForceEncryption 选项设置为**“否”**,则客户端应用程序可以请求加密,但不是必需的。

    • 更改 ForceEncryption 设置后,必须重新启动 SQL Server。

    始终要对客户端应用程序与 SQL Server 连接时传输的凭据(在登录数据包中)进行加密。SQL Server 将使用可信证书颁发机构颁发的证书(如果可用)。如果未安装可信证书,则在启动实例时 SQL Server 将生成自签名证书,并使用自签名证书对凭据进行加密。自签名证书有助于提高安全性,但它不提供针对通过服务器进行的身份欺骗的保护。如果使用自签名证书,并且 ForceEncryption 选项的值设置为**“是”**,则将使用自签名证书对通过网络在 SQL Server 和客户端应用程序之间传输的所有数据进行加密。

    注意事项注意

    使用自签名证书加密的 SSL 连接不提供强安全性。它们容易在传输中途受到攻击。在生产环境中或在连接到 Internet 的服务器上,不应依赖使用自签名证书的 SSL。

证书要求

若要 SQL Server 加载 SSL 证书,则该证书必须满足以下条件:

  • 该证书必须位于本地计算机证书存储区中,或者位于当前用户证书存储区中。

  • 当前系统时间必须在证书 Valid from 属性之后、证书 Valid to 属性之前。

  • 该证书必须用于服务器身份验证。这需要证书的 Enhanced Key Usage 属性以指定 Server Authentication (1.3.6.1.5.5.7.3.1)

  • 必须使用 AT_KEYEXCHANGEKeySpec 选项创建证书。通常,证书的密钥用法属性 (KEY_USAGE) 还将包括密钥加密 (CERT_KEY_ENCIPHERMENT_KEY_USAGE)。

  • 证书的 Subject 属性必须指明公用名称 (CN) 与服务器的主机名或完全限定的域名一样。如果 SQL Server 在故障转移群集中运行,则公用名称必须与虚拟服务器的主机名或 FQDN 相同,并且在故障转移群集的所有节点上都必须提供这些证书。

  • SQL Server 2008 R2 和 SQL Server 2008 R2 Native Client 支持通配符证书。其他客户端可能不支持通配符证书。有关详细信息,请参阅客户端文档和 KB258858

SQL Server Native Client 证书要求

将 "SERVER=shortname; ENCRYPT=yes" 用于其主题指定完全限定域名 (FQDN) 的证书的应用程序在过去由于放宽的验证而已进行了连接。SQL Server 2008 R2 通过对证书的主题进行完全匹配来加强安全性。依赖于已放宽验证的应用程序必须采取以下措施之一:

  • 在连接字符串中使用 FQDN。

    • 如果连接字符串的 SERVER 关键字是在应用程序外部配置的,则此选项不要求重新编译应用程序。

    • 此选项不适用于已对其连接字符串进行硬编码的应用程序。

    • 此选项不适用于使用数据库镜像的应用程序,因为镜像服务器将回复一个简单名称。

  • 为映射到 FQDN 的短名称添加别名。

    • 此选项甚至适用于已对其连接字符串进行硬编码的应用程序。

    • 此选项不适用于使用数据库镜像的应用程序,因为提供程序不通过查找别名来获取收到的故障转移伙伴名称。

  • 为短名称签发一个证书。

    • 此选项适用于所有应用程序。

对群集进行加密

若要在故障转移群集中使用加密,必须在故障转移群集中的所有节点上安装具有故障转移群集实例完全限定 DNS 名称的服务器证书。例如,如果有一个双节点群集,节点名分别为 test1.your company.comtest2.your company.com,并且还有一个名为 fcisql 的 SQL Server 故障转移群集实例,则必须获得 fcisql.your company.com 的证书,并在两个节点上都安装此证书。若要为加密配置故障转移群集,可以在**“SQL Server 网络配置”“<服务器> 的协议”**属性框中选中 ForceEncryption 复选框。

Internet 协议安全 (IPSec)

可以使用 IPSec 在传输过程中对 SQL Server 数据进行加密。IPSec 是由客户端和服务器操作系统提供的,不需要进行 SQL Server 配置。有关 IPSec 的信息,请参阅 Windows 文档或网络文档。