连接数据库(以SSL方式)

    当开启SSL模式后,必须提供根证书、服务器证书和私钥。

    配置步骤(假设用户的证书文件放在数据目录/gaussdb/data/datanode下,且采用默认文件名):

    1. 以操作系统用户omm登录数据库主节点。
    2. 生成并配置证书

      生成SSL证书,具体请参见证书生成。将生成出的文件server.crt,server.key,cacert.pem拷贝到服务端数据目录下。

      在Unix系统上,server.crt、server.key的权限设置必须禁止任何外部或组的访问,请执行如下命令实现这一点。

    3. 开启SSL认证模式。

      1. gs_guc set -D /gaussdb/data/datanode -c "ssl=on"
    4. 配置客户端接入认证参数,IP为所要连接的主机IP。

      表示允许127.0.0.1/32网段的客户端以ssl认证方式连接到openGauss服务器。

    5. 配置SSL认证相关的数字证书参数。

      各命令后所附为设置成功的回显。

      1. gs_guc set -D /gaussdb/data/datanode -c "ssl_cert_file='server.crt'"
      2. gs_guc set: ssl_cert_file='server.crt'
      1. gs_guc set -D /gaussdb/data/datanode -c "ssl_key_file='server.key'"
      2. gs_guc set: ssl_key_file='server.key'
    6. 重启数据库。

      1. gs_om -t stop && gs_om -t start
    7. 生成并上传证书文件

    上传证书文件,将在服务端配置章节生成出的文件client.key.pk8,client.crt,cacert.pem放置在客户端。

    1. import java.sql.Connection;
    2. import java.util.Properties;
    3. import java.sql.DriverManager;
    4. import java.sql.Statement;
    5. import java.sql.ResultSet;
    6. public class SSL{
    7. public static void main(String[] args) {
    8. Properties urlProps = new Properties();
    9. String urls = "jdbc:postgresql://10.29.37.136:8000/postgres";
    10. /**
    11. * ================== 示例1 使用NonValidatingFactory通道,pg_hba.conf文件中MTETHOD不为cert
    12. /*
    13. urlProps.setProperty("sslfactory","org.postgresql.ssl.NonValidatingFactory");
    14. urlProps.setProperty("user", "world");
    15. //此处的test@123为创建用户CRETAE USER world WITH PASSWORD 'test123@'时指定的密码
    16. urlProps.setProperty("password", "test@123");
    17. urlProps.setProperty("ssl", "true");
    18. */
    19. /**
    20. * ================== 示例2 - 5 使用证书,pg_hba.conf文件中MTETHOD为cert
    21. */
    22. urlProps.setProperty("sslcert", "client.crt");
    23. // DER格式的客户端秘钥
    24. urlProps.setProperty("sslkey", "client.key.pk8");
    25. urlProps.setProperty("sslrootcert", "cacert.pem");
    26. /* ================== 示例2 设置ssl为true,使用证书认证 */
    27. urlProps.setProperty("ssl", "true");
    28. /* ================== 示例3 设置sslmode为require,使用证书 */
    29. // urlProps.setProperty("sslmode", "require");
    30. // urlProps.setProperty("sslmode", "verify-ca");
    31. /* ================== 示例5 设置sslmode为verify-full,使用证书(Linux下验证) */
    32. // urls = "jdbc:postgresql://world:8000/postgres";
    33. // urlProps.setProperty("sslmode", "verify-full");
    34. try {
    35. Class.forName("org.postgresql.Driver").newInstance();
    36. } catch (Exception e) {
    37. e.printStackTrace();
    38. }
    39. try {
    40. Connection conn;
    41. conn = DriverManager.getConnection(urls,urlProps);
    42. conn.close();
    43. } catch (Exception e) {
    44. e.printStackTrace();
    45. }
    46. }