更新时间:2026-07-28 GMT+08:00
分享

以国密TLS方式连接

用户通过JDBC连接GaussDB服务器时,可以通过开启国密TLS加密客户端和服务器之间的通信,为敏感数据在网络上的传输提供高强度的安全保障手段。以国密TLS方式连接数据库有两种方式:国密TLS单向认证、国密TLS双向认证。单向认证只需客户端验证服务端身份,而双向认证则需要客户端和服务端双方互相验证身份。

方式一:国密TLS单向认证

前置条件:

  • 在运行环境(如IDE)已添加gaussdbjdbc.jar包。
  • 用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的cacert.pem根证书。
    • 关于证书生成和获取,请联系管理员。
    • 服务端配置证书的具体操作,请联系管理员。

使用国密TLS单向认证的方式连接数据库的步骤如下:

  1. 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。

    此外,用户需要根据实际的应用场景,再导入其他的接口和类,详见JDBC接口参考
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Properties;

  2. 指定数据库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);

  3. 设置ssl属性值为true,设置sslmode为verify-ca。

    urlProps.setProperty("ssl", "true");
    urlProps.setProperty("sslmode", "verify-ca");

  4. 国密TLS单向认证:在客户端配置cacert.pem根证书,sslgmcipher仅允许配置为ECC_SM4_SM3。

    sslrootcert和sslgmcipher参数的具体说明,详见sslrootcertsslgmcipher
    urlProps.setProperty("sslrootcert", "cacert.pem");
    urlProps.setProperty("sslgmcipher", "ECC_SM4_SM3");

  5. 加载驱动。

    执行以下命令加载数据库驱动程序“com.huawei.gaussdb.jdbc.Driver”。

    Class.forName("com.huawei.gaussdb.jdbc.Driver");

  6. 创建数据库连接。

    调用DriverManager.getConnection(String url, Properties info),进行数据库连接。
    Connection conn = DriverManager.getConnection(urls,urlProps);

方式二:国密TLS双向认证

前置条件:

  • 在运行环境(如IDE)已添加gaussdbjdbc.jar包。
  • 用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的client.key.pk8、client_enc.key.pk8、client.crt、client_enc.crt、cacert.pem证书与私钥文件。
    • 关于证书生成和获取,请联系管理员。
    • 服务端配置证书的具体操作,请联系管理员。

使用国密TLS双向认证的方式连接数据库的步骤如下:

  1. 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。

    此外,用户需要根据实际的应用场景,再导入其他的接口和类,详见JDBC接口参考

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Properties;

  2. 指定数据库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);

  3. 设置ssl属性值为true,设置sslmode为verify-ca。

    urlProps.setProperty("ssl", "true");
    urlProps.setProperty("sslmode", "verify-ca");

  4. 国密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");

  5. 加载驱动。

    执行以下命令加载数据库驱动程序“com.huawei.gaussdb.jdbc.Driver”。

    Class.forName("com.huawei.gaussdb.jdbc.Driver");

  6. 创建数据库连接。

    调用DriverManager.getConnection(String url, Properties info),进行数据库连接。
    Connection conn = DriverManager.getConnection(urls,urlProps);

  • 使用JDBC客户端国密TLS功能
    • 需依赖于1.1或以上版本的BGMProvider开源软件(bgmprovider-1.X.X-jar-with-dependencies.jar)。
    • JDK版本需为8u302及以上。
  • 由于国密系列算法具有原理严密、计算复杂、安全强度高的特点,因此配置国密TLS加密传输后,相比国际TLS可能出现明显的性能劣化。
  • 将客户端密钥转换为PKCS8二进制格式需使用OpenSSL命令行。

相关文档