了解 SSL 支持

当连接到 SQL Server 时,如果应用程序请求加密并且 SQL Server 的实例已配置为支持 SSL 加密,则 Microsoft SQL Server 2005 JDBC Driver 启动 SSL 握手。握手允许服务器和客户端协商将用于保护数据的加密方式和加密算法。在完成 SSL 握手之后,客户端和服务器可以安全地发送已加密的数据。在 SSL 握手期间,服务器向客户端发送其公钥证书。公钥证书的颁发者称为证书颁发机构 (CA)。客户端负责验证证书颁发机构是客户端信任的证书颁发机构。

如果应用程序未请求加密,Microsoft SQL Server 2005 JDBC Driver 将不强制 SQL Server 支持 SSL 加密。如果 SQL Server 实例未配置为强制 SSL 加密,将建立连接而不进行加密。如果 SQL Server 实例已配置为强制 SSL 加密,则当驱动程序在经正确配置的 Java 虚拟机 (JVM) 上运行时,它将自动启用 SSL 加密,否则连接将终止并且驱动程序将报错。

备注

有关如何为 SQL Server 配置 SSL 的详细信息,请参阅 SQL Server 2005 联机丛书中的“加密与 SQL Server 的连接”主题。

为了允许应用程序使用 SSL 加密,Microsoft SQL Server 2005 JDBC Driver 版本 1.2 提供了以下连接属性:encrypttrustServerCertificatetrustStoretrustStorePasswordhostNameInCertificate。有关详细信息,请参阅设置连接属性

下表总结了 Microsoft SQL Server 2005 JDBC Driver 版本 1.2 对于可能的 SSL 连接方案的行为方式。每种方案使用一组不同的 SSL 连接属性。该表包含:

  • blank: “连接字符串中不存在此属性”

  • value: “连接字符串中存在此属性且属性的值有效”

  • any: “连接字符串中是否存在此属性或属性的值是否有效均无关紧要”

备注

同样的行为适用于 SQL Server 用户身份验证和 Windows 集成身份验证。

encrypt trustServerCertificate hostNameInCertificate trustStore trustStorePassword 行为

false 或空白

任何

任何

任何

任何

Microsoft SQL Server 2005 JDBC Driver 将不强制 SQL Server 支持 SSL 加密。如果服务器具有自签名证书,驱动程序将启动 SSL 证书交换。将不会验证 SSL 证书,而只加密登录数据包中的凭据。

如果服务器要求客户端支持 SSL 加密,驱动程序将启动 SSL 证书交换。将不验证 SSL 证书,但将加密整个通信。

备注

在某些版本 1.4 的 JVM 上,JDBC 驱动程序可能不对登录凭据进行加密。我们建议您尽量使用更高版本的 JVM。

true

true

任何

任何

任何

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。请注意,如果 trustServerCertificate 属性设置为“true”,驱动程序将不验证 SSL 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用在连接 URL 上指定的 serverName 属性以验证服务器 SSL 证书,并依赖于信任关系管理器工厂的查找规则以确定要使用哪一个证书存储区。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用为 hostNameInCertificate 属性指定的值验证 SSL 证书的 subject 值。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用 trustStore 属性值以查找证书 trustStore 文件,并使用 trustStorePassword 属性值以检查 trustStore 文件的完整性。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用 trustStorePassword 属性值以检查默认 trustStore 文件的完整性。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用 trustStore 属性值以查找 trustStore 文件的位置。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用 trustStorePassword 属性值以检查默认 trustStore 文件的完整性。此外,驱动程序还将使用 hostNameInCertificate 属性值以验证 SSL 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用 trustStore 属性值以查找 trustStore 文件的位置。此外,驱动程序还将使用 hostNameInCertificate 属性值以验证 SSL 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

true

false 或空白

Microsoft SQL Server 2005 JDBC Driver 要求对 SQL Server 使用 SSL 加密。

如果服务器要求客户端支持 SSL 加密,或者如果服务器支持加密,则驱动程序将启动 SSL 证书交换。

驱动程序将使用 trustStore 属性值以查找证书 trustStore 文件,并使用 trustStorePassword 属性值以检查 trustStore 文件的完整性。此外,驱动程序还将使用 hostNameInCertificate 属性值以验证 SSL 证书。

如果服务器未配置为支持加密,驱动程序将报错并终止连接。

如果 encrypt 属性设置为 true,则 Microsoft SQL Server 2005 JDBC Driver 使用 JVM 的默认 JSSE 安全提供程序以与 SQL Server 协商 SSL 加密。默认的安全提供程序可能不支持成功协商 SSL 加密所需的全部功能。例如,默认的安全提供程序可能不支持在 SQL Server SSL 证书中使用的 RSA 公钥的大小。在这种情况下,默认的安全提供程序可能报错,此错误将导致 JDBC 驱动程序终止连接。为了解决这一问题,请执行下列操作之一:

  • 使用具有较小 RSA 公钥的服务器证书配置 SQL Server

  • 在“<java 主文件夹>/lib/security/java.security”安全属性文件中将 JVM 配置为使用其他 JSSE 安全提供程序

  • 使用其他 JVM

验证服务器 SSL 证书

在 SSL 握手期间,服务器向客户端发送其公钥证书。JDBC 驱动程序或客户端必须验证服务器证书是由客户端信任的证书颁发机构颁发的。驱动程序要求服务器证书必须满足以下条件:

  • 证书是由受信任的证书颁发机构颁发的。

  • 必须颁发证书才能进行服务器身份验证。

  • 证书未过期。

  • 证书的 subject 属性指示公用名 (CN) 以连接字符串中指定的服务器名称开始,或者,如果已指定,则以 hostNameInCertificate 属性值开始。如果服务器名称是 IP 地址,驱动程序将验证 CN 值以此 IP 地址开始。

另请参见

概念

使用 SSL 加密

其他资源

保护 JDBC Driver 应用程序