连接数据库(以SSL方式)
用户通过JDBC连接GaussDB服务器时,可以通过开启SSL加密客户端和服务器之间的通讯,为敏感数据在Internet上的传输提供了一种安全保障手段。
本节主要介绍应用程序通过JDBC如何采用SSL的方式对客户端进行配置(服务端配置请联系管理员)。
在使用本节所描述的方法前,默认用户已经获取了服务端和客户端所需要的证书和私钥文件,关于证书等文件的获取请参考Openssl相关文档和命令 。
客户端配置
上传证书文件,将在服务端配置章节生成的文件client.key.pk8、client.crt、cacert.pem放置在客户端。
示例
注:示例1和示例2选择其一。
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class SSL{
public static void main(String[] args) {
Properties urlProps = new Properties();
String urls = "jdbc:gaussdb://$ip:$port/database";
String userName = System.getenv("EXAMPLE_USERNAME_ENV");
String password = System.getenv("EXAMPLE_PASSWORD_ENV");
/**
* ================== 示例1 使用NonValidatingFactory通道
*/
urlProps.setProperty("sslfactory","com.huawei.gaussdb.jdbc.ssl.NonValidatingFactory");
urlProps.setProperty("user", userName);
urlProps.setProperty("password", password);
urlProps.setProperty("ssl", "true");
/**
* ================== 示例2 使用证书
*/
urlProps.setProperty("sslcert", "client.crt");
urlProps.setProperty("sslkey", "client.key.pk8");
urlProps.setProperty("sslrootcert", "cacert.pem");
urlProps.setProperty("user", userName);
urlProps.setProperty("password", password);
urlProps.setProperty("ssl", "true");
/* sslmode可配置为:require、verify-ca、verify-full,以下三个示例选择其一*/
/* ================== 示例2.1 设置sslmode为require,使用证书 */
urlProps.setProperty("sslmode", "require");
/* ================== 示例2.2 设置sslmode为verify-ca,使用证书 */
urlProps.setProperty("sslmode", "verify-ca");
/* ================== 示例2.3 设置sslmode为verify-full,使用证书(Linux下验证) */
urls = "jdbc:gaussdb://world:8000/database";
urlProps.setProperty("sslmode", "verify-full");
try |