以国密TLS方式连接
用户通过JDBC连接GaussDB服务器时,可以通过开启国密TLS加密客户端和服务器之间的通讯,为敏感数据在Internet上的传输提供高强度的安全保障手段。以国密TLS方式连接数据库有2种方式:国密TLS单向认证、国密TLS双向认证。单向认证只需客户端验证服务端身份,而双向认证则需要客户端和服务端双方互相验证身份。
方式一:国密TLS单向认证
前置条件:用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的cacert.pem根证书,以下步骤4介绍如何将根证书配置在客户端。关于证书生成和获取、服务端配置的具体操作,请联系管理员或参见Openssl相关文档和命令。
使用国密TLS单向认证的方式连接数据库的命令如下:
- 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。
此外,用户需要根据实际的应用场景,再导入其他的接口和类,详见JDBC接口参考。
import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties;
- 指定数据库urls($ip、$port、database需要用户自行修改)、用户名和密码。
从环境变量EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV获取的用户名和密码设置为Properties对象的属性值。
String urls = "jdbc:gaussdb://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Properties urlProps = new Properties(); urlProps.setProperty("user", userName); urlProps.setProperty("password", password);
- 设置SSL属性为true,设置sslmode为verify-ca。
urlProps.setProperty("ssl", "true"); urlProps.setProperty("sslmode", "verify-ca");
- 国密TLS单向认证:在客户端配置cacert.pem根证书,sslgmcipher仅允许配置为ECC_SM4_SM3。
sslrootcert和sslgmcipher参数的具体说明,详见sslrootcert和sslgmcipher。
urlProps.setProperty("sslrootcert", "cacert.pem"); urlProps.setProperty("sslgmcipher", "ECC_SM4_SM3");
- 加载驱动。
- 在代码运行工具(如IDE)中添加gaussdbjdbc.jar包。
- 执行以下命令加载数据库驱动程序“com.huawei.gaussdb.jdbc.Driver”。
Class.forName("com.huawei.gaussdb.jdbc.Driver");
- 创建数据库连接。
调用DriverManager.getConnection(String url, Properties info),进行数据库连接。
Connection conn = DriverManager.getConnection(urls,urlProps);
方式二:国密TLS双向认证
前置条件:用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的client.key.pk8、client_enc.key.pk8、client.crt、client_enc.crt、cacert.pem证书与私钥文件,以下步骤4介绍如何将证书配置在客户端。关于证书生成和获取、服务端配置的具体操作,请联系管理员或参见Openssl相关文档和命令。
使用国密TLS双向认证的方式连接数据库的前三个步骤和国密TLS单向认证方式的前三个步骤一样,具体如下:
- 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。
此外,用户需要根据实际的应用场景,再导入其他的接口和类,详见JDBC接口参考。
import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties;
- 指定数据库urls($ip、$port、database需要用户自行修改)、用户名和密码。
从环境变量EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV获取的用户名和密码设置为Properties对象的属性值。
String urls = "jdbc:gaussdb://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Properties urlProps = new Properties(); urlProps.setProperty("user", userName); urlProps.setProperty("password", password);
- 设置SSL属性为true,设置sslmode为verify-ca。
urlProps.setProperty("ssl", "true"); urlProps.setProperty("sslmode", "verify-ca");
- 国密TLS双向认证:在客户端配置client.key.pk8、client_enc.key.pk8、client.crt、client_enc.crt、cacert.pem证书。sslgmcipher参数可以配置为ECC_SM4_SM3或者ECDHE_SM4_SM3,具体的参数说明详见sslgmcipher。
urlProps.setProperty("sslrootcert", "cacert.pem"); urlProps.setProperty("sslgmcipher", "ECDHE_SM4_SM3"); urlProps.setProperty("sslcert", "client.crt"); urlProps.setProperty("sslkey", "client.key.pk8"); urlProps.setProperty("sslenccert", "client_enc.crt"); urlProps.setProperty("sslenckey", "client_enc.key.pk8");
- 加载驱动。
- 在代码运行工具(如IDE)中添加gaussdbjdbc.jar包。
- 执行以下命令加载数据库驱动程序“com.huawei.gaussdb.jdbc.Driver”。
Class.forName("com.huawei.gaussdb.jdbc.Driver");
- 创建数据库连接。
调用DriverManager.getConnection(String url, Properties info),进行数据库连接。
Connection conn = DriverManager.getConnection(urls,urlProps);
- 将客户端密钥转化为PKCS8二进制格式需要通过Openssl命令行方式,具体命令请参考将客户端密钥转化为PKCS8二进制格式。
- 使用JDBC客户端国密TLS能力,需要依赖于1.1或以上版本的BGMProvider开源软件(bgmprovider-1.X.X-jar-with-dependencies.jar)。
- 使用JDBC客户端国密TLS能力,JDK要求为8u302及以上版本。
- 由于国密系列算法本身存在原理严密、计算复杂、安全强度高的特点,因此配置国密TLS加密传输后,相比于国际TLS会有明显的性能劣化。