为加密配置客户端
Microsoft JDBC Driver for SQL Server 或客户端必须验证服务器是正确的服务器,并且其证书是由客户端信任的证书颁发机构颁发的。 为了验证服务器证书,在连接时必须提供信任材料。 此外,服务器证书的颁发者必须是客户端信任的证书颁发机构。
本文首先介绍了如何在客户端计算机中提供信任材料。 然后介绍当私钥证书颁发机构颁发 SQL Server 实例的传输层安全性 (TLS) 证书时,如何将服务器证书导入到客户端计算机的信任存储区。
若要详细了解如何验证服务器证书,请参阅了解加密支持中的“验证服务器 TLS 证书”部分。
配置客户端信任存储
验证服务器证书要求在连接时提供信任材料,可以使用 trustStore 和 trustStorePassword 连接属性显式提供材料,也可以使用基础 Java 虚拟机 (JVM) 的默认信任存储隐式提供材料 。 有关如何在连接字符串中设置 trustStore 和 trustStorePassword 属性的详细信息,请参阅通过加密进行连接 。
如果未指定 trustStore 属性或该属性设置为 null,则 Microsoft JDBC Driver for SQL Server 将依赖于基础 JVM 的安全提供程序,即 Java 安全套接字扩展 (SunJSSE)。 SunJSSE 提供程序提供一个默认的 TrustManager,用于验证由 SQL Server 针对在信任存储中提供的信任材料返回的 X.509 证书。
TrustManager 将尝试以下搜索顺序找到默认的 trustStore:
- 如果定义了系统属性“javax.net.ssl.trustStore”,则 TrustManager 将尝试使用由该系统属性指定的文件名来查找默认的 trustStore 文件。
- 如果未指定“javax.net.ssl.trustStore”系统属性并且存在文件“<java-home>/lib/security/jssecacerts”,则使用该文件。
- 如果文件“<java-home>/lib/security/cacerts”存在,则使用该文件。
有关详细信息,请参阅 Sun Microsystems 网站上的 SUNX509 TrustManager 接口文档。
Java 运行时环境允许您设置 trustStore 和 trustStorePassword 系统属性,如下所示:
java -Djavax.net.ssl.trustStore=C:\MyCertificates\storeName
java -Djavax.net.ssl.trustStorePassword=storePassword
在这种情况下,在此 JVM 上运行的任何应用程序都将使用这些设置作为默认设置。 为了在应用程序中覆盖默认设置,应在连接字符串中或在 SQLServerDataSource 类的适当 setter 方法中设置 trustStore 和 trustStorePassword 连接属性 。
此外,你还可以配置和管理默认的信任存储文件,如“<java-home>/lib/security/jssecacerts”和“<java-home>/lib/security/cacerts”。 为此,请使用随 JRE(Java 运行时环境)安装的 JAVA“keytool”实用工具。 有关“keytool”实用工具的详细信息,请参阅 Oracle 网站上的 keytool 文档。
将服务器证书导入信任存储
在 TLS 握手期间,服务器向客户端发送其公钥证书。 公钥证书的颁发者称为证书颁发机构 (CA)。 客户端必须确保证书颁发机构是客户端信任的证书颁发机构。 此保证通过提前了解受信任 CA 的公钥来实现。 通常,JVM 随附了一组预定义的受信任的证书颁发机构。
如果私钥证书颁发机构颁发了 SQL Server 实例的 TLS 证书,则您必须将证书颁发机构的证书添加到客户端计算机的信任存储区内的信任证书列表中。
为此,请使用随 JRE(Java 运行时环境)安装的 JAVA“keytool”实用工具。 下面的命令提示演示如何使用“keytool”实用工具从文件中导入证书:
keytool -import -v -trustcacerts -alias myServer -file caCert.cer -keystore truststore.ks
此示例使用名为“caCert.cer”的文件作为证书文件。 您可以从服务器获得此证书文件。 以下步骤说明如何将服务器证书导出到文件中:
- 依次选择“开始”和“运行”,然后键入 MMC。 (MMC 是 Microsoft 管理控制台的首字母缩写词。)
- 在 MMC 中,打开“证书”。
- 展开“个人”,然后展开“证书”。
- 右键单击服务器证书,然后选择“所有任务”\“导出”。
- 选中“下一步”以略过“证书导出向导”的“欢迎使用”对话框。
- 确认已选择
No, do not export the private key
,然后选择“下一步”。 - 确保选择“DER 编码的二进制 X.509 (.CER)”或“Base-64 编码的 X.509 (.CER)”,然后选择“下一步”。
- 输入导出文件名。
- 选择“下一步”,然后选择“完成”以导出证书。