使用 SSL 加密进行连接

Microsoft SQL Server 2005 JDBC Driver 版本 1.2 提供了新的连接属性和新的 gettersetter 方法,以允许应用程序使用安全套接字层 (SSL) 加密。

本主题中的示例描述如何在 Java 应用程序中使用这些新的连接字符串属性。有关这些新的连接字符串属性(如 encrypttrustServerCertificatetrustStoretrustStorePasswordhostNameInCertificate)的详细信息,请参阅设置连接属性

encrypt 属性设置为 truetrustServerCertificate 属性设置为 true 时,Microsoft SQL Server 2005 JDBC Driver 将不验证 SQL Server SSL 证书。这一点对于允许在测试环境中建立连接通常是必需的,如 SQL Server 实例只具有自签名证书的情况。

下面的代码示例演示如何在连接字符串中设置 trustServerCertificate 属性:

String connectionUrl = 
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true;trustServerCertificate=true";

encrypt 属性设置为 truetrustServerCertificate 属性设置为 false 时,Microsoft SQL Server 2005 JDBC Driver 将验证 SQL Server SSL 证书。验证服务器证书是 SSL 握手过程的一部分,这可确保服务器是要连接的正确服务器。为了验证服务器证书,在连接时必须提供信任材料,既可以使用 trustStoretrustStorePassword 连接属性显式提供材料,也可以使用基础 Java 虚拟机 (JVM) 的默认信任存储区隐式提供材料。

trustStore 属性指定指向证书 trustStore 文件的路径(包括文件名),该文件中包含客户端信任的证书的列表。trustStorePassword 属性指定用来检查 trustStore 数据完整性的密码。有关使用 JVM 的默认信任存储区的详细信息,请参阅为 SSL 加密配置客户端

下面的代码示例演示如何在连接字符串中设置 trustStoretrustStorePassword 属性:

String connectionUrl = 
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword";

JDBC Driver 提供了一个附加属性 hostNameInCertificate,该属性指定服务器的主机名。此属性的值必须与证书的 subject 属性一致。

下面的代码示例演示如何在连接字符串中使用 hostNameInCertificate 属性:

String connectionUrl = 
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword" +
     "hostNameInCertificate=hostName";

备注

或者,您可以使用由 SQLServerDataSource 类提供的适当的 setter 方法来设置连接属性的值。

另请参见

概念

使用 SSL 加密

其他资源

保护 JDBC Driver 应用程序