更新时间:2024-11-12 GMT+08:00
分享

以国密TLS方式连接

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

方式一:国密TLS单向认证

前置条件:用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的cacert.pem根证书,以下步骤4介绍如何将根证书配置在客户端。关于证书生成和获取、服务端配置的具体操作,请联系管理员或参见Openssl相关文档和命令。

使用国密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. 加载驱动。

    1. 在代码运行工具(如IDE)中添加gaussdbjdbc.jar包。
    2. 执行以下命令加载数据库驱动程序“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双向认证

前置条件:用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的client.key.pk8、client_enc.key.pk8、client.crt、client_enc.crt、cacert.pem证书与私钥文件,以下步骤4介绍如何将证书配置在客户端。关于证书生成和获取、服务端配置的具体操作,请联系管理员或参见Openssl相关文档和命令。

使用国密TLS双向认证的方式连接数据库的前三个步骤和国密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. 加载驱动。

    1. 在代码运行工具(如IDE)中添加gaussdbjdbc.jar包。
    2. 执行以下命令加载数据库驱动程序“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);

  1. 将客户端密钥转化为PKCS8二进制格式需要通过Openssl命令行方式,具体命令请参考将客户端密钥转化为PKCS8二进制格式
  2. 使用JDBC客户端国密TLS能力,需要依赖于1.1或以上版本的BGMProvider开源软件(bgmprovider-1.X.X-jar-with-dependencies.jar)。
  3. 使用JDBC客户端国密TLS能力,JDK要求为8u302及以上版本。
  4. 由于国密系列算法本身存在原理严密、计算复杂、安全强度高的特点,因此配置国密TLS加密传输后,相比于国际TLS会有明显的性能劣化。

相关文档