为 JDBC 客户端配置 TLS
要为 JDBC 客户端配置 TLS:
-
设置密钥库和信任库属性。
-
设置 TLSmode 参数。
-
(可选)运行 SSL 调试实用程序以测试您的配置。
设置密钥库/信任库属性
可以通过以下方式设置密钥库和信任库属性,每种方式各有利弊:
-
在驱动程序级别。
-
在 JVM 级别。
驱动程序级别配置
如果您将 DbVizualizer 等工具用于多个连接,请使用 JDBC 连接属性配置密钥库和信任库。但是,这确实会在连接字符串中公开这些值:
-
KeyStorePath
-
KeyStorePassword
-
TrustStorePath
-
TrustStorePassword
例如:
Properties props = new Properties();
props.setProperty("KeyStorePath", keystorepath);
props.setProperty("KeyStorePassword", keystorepassword);
props.setProperty("TrustStorePath", truststorepath);
props.setProperty("TrustStorePassword", truststorepassword);
JVM 级别配置
在 JVM 级别设置密钥库和信任库参数会将它们从连接字符串中排除,这可能更适合安全要求较严格的环境:
-
javax.net.ssl.keyStore
-
javax.net.ssl.trustStore
-
javax.net.ssl.keyStorePassword
-
javax.net.ssl.trustStorePassword
例如:
System.setProperty("javax.net.ssl.keyStore","clientKeyStore.key");
System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
System.setProperty("javax.net.ssl.keyStorePassword","new_keystore_password")
System.setProperty("javax.net.ssl.trustStorePassword","new_truststore_password");
设置 TLSmode 连接属性
您可以设置 TLSmode 连接属性以确定如何处理证书。默认情况下,禁用 TLSmode。
TLSmode 标识 Vertica 应用于 JDBC 连接的安全级别。必须将 Vertica 配置为处理 TLS 连接,然后才能与其建立 TLS 加密连接。有关详细信息,请参阅TLS 协议。有效值包括:
-
disable
:JDBC 使用纯文本连接并且不实施任何安全措施。 -
require
:JDBC 使用 TLS 连接而不验证 CA 证书。 -
verify-ca
:JDBC 使用 TLS 连接并确认服务器证书已由证书颁发机构签名。此设置等效于已弃用的ssl=true
属性。 -
verify-full
:JDBC 使用 TLS 连接,确认服务器证书已由证书颁发机构签名,并验证主机名与服务器证书中提供的名称匹配。
如果设置了此属性和 SSL 属性,则此属性优先。
例如,要将 JDBC 配置为使用 TLS 连接服务器而不验证 CA 证书,您可以通过 VerticaConnection.setProperty()
方法将 TLSmode 属性设置为 'require':
Properties props = new Properties();
props.setProperty("TLSmode", "verify-full");
运行 SSL 调试实用程序
配置 TLS 后,您可以为调试实用程序运行以下命令:
$ java -Djavax.net.debug=ssl
通过调试实用程序,可以使用多个调试指示符(选项)。指示符有助于缩小返回的调试信息的范围。例如,可以指定其中一个选项来打印握手消息或会话活动。
有关该调试实用程序及其选项的信息,请参阅 Oracle 文档《JSSE 参考指南》中的“调试实用程序”。
有关解释调试信息的说明,请参阅 Oracle 文档调试 SSL/TLS 连接。