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

以SSL方式连接

用户通过JDBC连接GaussDB服务器时,可以通过开启SSL加密客户端和服务器之间的通讯,为敏感数据在Internet上的传输提供一种安全保障手段。以SSL方式连接数据库有2种方式:使用NonValidatingFactory通道、使用证书认证。其中使用证书认证的连接方式,客户端和服务端双方会互相验证身份。本小节中,连接数据库是采用接口三:DriverManager.getConnection(String url, Properties info)。

方式一:使用NonValidatingFactory通道

前置条件:用户已经获取服务端所需要的证书和私钥文件,并完成服务端配置。关于证书生成和获取、服务端配置的具体操作,请联系管理员或参见Openssl相关文档和命令。

使用NonValidatingFactory通道的方式连接数据库的命令如下:

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

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

  2. 指定数据库sourceURL($ip、$port、database需要用户自行修改)、用户名和密码。

    用户名和密码直接写到代码中有很大的安全风险,建议在环境变量中存放。

    String sourceURL = "jdbc:gaussdb://$ip:$port/database";
    Properties urlProps = new Properties();
    urlProps.setProperty("user", System.getenv("EXAMPLE_USERNAME_ENV"));
    urlProps.setProperty("password", System.getenv("EXAMPLE_PASSWORD_ENV"));

  3. 设置SSL属性为true,使用NonValidatingFactory通道。

    urlProps.setProperty("ssl", "true");
    urlProps.setProperty("sslfactory","com.huawei.gaussdb.jdbc.ssl.NonValidatingFactory");

  4. 加载驱动。

    1. 在代码运行工具(如IDE)中添加gaussdbjdbc.jar包。
    2. 执行以下命令加载数据库驱动程序“com.huawei.gaussdb.jdbc.Driver”。
    Class.forName("com.huawei.gaussdb.jdbc.Driver");

  5. 创建数据库连接。

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

方式二:使用证书认证

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

使用客户端配置证书的方式连接数据库的命令如下:

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

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

  2. 指定数据库sourceURL($ip、$port、database需要用户自行修改)、用户名和密码。

    用户名和密码直接写到代码中有很大的安全风险,建议在环境变量中存放。

    String sourceURL = "jdbc:gaussdb://$ip:$port/database";
    Properties urlProps = new Properties();
    urlProps.setProperty("user", System.getenv("EXAMPLE_USERNAME_ENV"));
    urlProps.setProperty("password", System.getenv("EXAMPLE_PASSWORD_ENV"));

  3. 设置SSL属性为true,在客户端配置client.crt客户端证书、cacert.pem根证书、client.key.pk8客户端私钥。

    urlProps.setProperty("ssl", "true");
    urlProps.setProperty("sslcert", "client.crt");
    urlProps.setProperty("sslrootcert", "cacert.pem");
    urlProps.setProperty("sslkey", "client.key.pk8");

    客户端私钥文件使用前,需要将client.key转化为client.key.pk8格式:

    /**
     * openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt
     * openssl pkcs8 -topk8 -inform PEM -in client.key -outform DER -out client.key.der -v1 PBE-MD5-DES
     * openssl pkcs8 -topk8 -inform PEM -in client.key -outform DER -out client.key.der -v1 PBE-SHA1-3DES
     * 以上算法由于安全级别较低,不推荐使用。
     * 如果客户需要采用更高级别的私钥加密算法,启用bouncycastle或者其他第三方私钥解密密码包后可以使用的私钥加密算法如下:
     * openssl pkcs8 -in client.key -topk8  -outform DER -out client.key.der -v2 AES128
     * openssl pkcs8 -in client.key -topk8  -outform DER -out client.key.der -v2 aes-256-cbc -iter 1000000
     * openssl pkcs8 -in client.key -topk8 -out client.key.der  -outform Der -v2 aes-256-cbc -v2prf hmacWithSHA512
     * 启用bouncycastle:使用jdbc的项目引入依赖:bcpkix-jdk15on.jar和bcprov-ext-jdk15on.jar包,版本建议:1.65以上。
     */

  4. 配置sslmode。

    sslmode设置值:require、verify-ca、verify-full,参数介绍详见sslmode。客户根据应用场景选择一种即可。
    /* 设置sslmode为require */
    urlProps.setProperty("sslmode", "require");
    /* 设置sslmode为verify-ca */
    urlProps.setProperty("sslmode", "verify-ca");
    /* 设置sslmode为verify-full(Linux下验证) */
    urlProps.setProperty("sslmode", "verify-full");

  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(sourceURL,urlProps);

相关文档