云数据库 GAUSSDB-连接数据库(以国密TLS方式):示例

时间:2024-11-13 14:45:17

示例

// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)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");

        urlProps.setProperty("user", userName);
        urlProps.setProperty("password", password);
        urlProps.setProperty("ssl", "true");
        urlProps.setProperty("sslmode", "verify-ca");
        /**
         * ==================  示例1  国密TLS单向认证
         */
        urlProps.setProperty("sslrootcert", "cacert.pem");
        /* sslgmcipher仅允许配置为ECC_SM4_SM3 */
        urlProps.setProperty("sslgmcipher", "ECC_SM4_SM3");
        /**
         * ==================  示例2  国密TLS双向认证
         */
        urlProps.setProperty("sslrootcert", "cacert.pem");
        /* sslgmcipher配置为ECC_SM4_SM3、ECDHE_SM4_SM3均可 */
        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");

        // 创建数据库连接。
        try {
            Class.forName("com.huawei.gaussdb.jdbc.Driver").newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            Connection conn;
            conn = DriverManager.getConnection(urls,urlProps);
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 将客户端密钥转化为PK CS 8二进制格式需要通过Openssl命令行方式,具体命令请参考将客户端密钥转化为PKCS8二进制格式
  2. 使用JDBC客户端国密TLS能力,需要依赖1.1或以上版本的BGMProvider开源软件(bgmprovider-1.X.X-jar-with-dependencies.jar)。
  3. 使用JDBC客户端国密TLS能力,JDK要求为8u302及以上版本。
  4. 由于国密系列算法本身存在原理严密、计算复杂、安全强度高的特点,因此配置国密TLS加密传输后,相比于国际TLS会有明显的性能劣化。
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-1723.html