详情页标题前

阿里云RDS数据库SSL连接RDS PostgreSQL数据库-云淘科技

详情页1

本文介绍配置SSL链路加密后,如何通过pgAdmin、psql命令行终端以及JDBC连接数据库

前提条件

  • 已开启SSL链路加密。如果未开启,请参见快速配置SSL加密或配置自定义证书

  • 已获取如下文件。

    • (可选)客户端证书(client.crt)、客户端证书私钥(client.key):如果在RDS控制台配置了客户端CA证书,则需要准备,获取方法请参见配置客户端CA证书。

    • 数据库CA证书:获取方法请参见下载CA证书或生成自签名证书。

操作步骤

pgAdmin客户端SSL连接

pgAdmin客户端是PostgreSQL官方推荐的数据库连接工具,在PostgreSQL官方网站下载并安装PostgreSQL时,将会自动安装pgAdmin 4客户端。下文以pgAdmin 4 V6.2.0为例,介绍如何连接RDS PostgreSQL实例。

如果您不想安装PostgreSQL,也可以单独下载pgAdmin客户端,仅用于连接远程数据库。

  1. 启动pgAdmin 4客户端。

    说明

    高版本客户端首次登录需要设置Master Password用于保护保存的密码和其他凭据。

  2. 右键单击Servers,选择Register > Server…

    阿里云RDS数据库SSL连接RDS PostgreSQL数据库-云淘科技

  3. General页签设置连接名称。 阿里云RDS数据库SSL连接RDS PostgreSQL数据库-云淘科技

  4. 选择Connection标签页,输入要连接的实例信息。 阿里云RDS数据库SSL连接RDS PostgreSQL数据库-云淘科技

    参数

    说明

    Host name/address

    RDS PostgreSQL实例的连接地址及对应的端口。

    • 若通过内网连接,需输入RDS实例的内网地址和内网端口。

    • 若使用外网连接,需输入RDS实例的外网地址和外网端口。

    您可以在RDS PostgreSQL实例的数据库连接页面查看。

    更多信息,请参见查看或修改连接地址和端口。

    Port

    Username

    RDS PostgreSQL实例的账号和密码。

    创建RDS实例的账号请参见创建账号和数据库。

    Password

  5. 选择Parameters标签页,添加SSL认证方式相关参数并配置证书。

    参数

    说明

    SSL mode

    PostgreSQL数据库开启SSL链路加密后,表示允许客户端通过SSL连接数据库,在客户端连接数据库时,请根据以下场景选择SSL mode参数的取值。

    • 数据库未配置客户端访问控制

      • 通过SSL连接时,SSL mode选择Require、Verify-CA或Verify-Full。

      • 不通过SSL连接时,SSL mode选择Disable。

    • 数据库配置了客户端访问控制,客户端必须使用SSL连接,SSL mode选择Require、Verify-CA或Verify-Full。

    Require、Verify-CA和Verify-Full含义如下:

    • Require:只对数据链路加密,并不验证数据库的真实性。

    • Verify-CA:加密数据链路,同时验证数据库的真实性。

    • Verify-Full:加密数据链路,验证数据库的真实性,同时比对证书内的CN或DNS与连接时配置的数据库连接地址是否一致。

    Client certificate

    如果完成了配置客户端CA证书,则需要配置此参数,表示客户端证书(client.crt)。

    Client certificate key

    如果完成了配置客户端CA证书,则需要配置此参数,表示客户端证书私钥(client.key)。

    Root certificate

    SSL mode取值为Verify-CAVerify-Full时,需要配置此参数,表示数据库CA证书路径。

    说明

    • 本示例中,客户端证书(client.crt)、客户端证书私钥(client.key)和数据库CA证书(ca1.crt)的文件路径请根据实际情况配置。

    • 本示例以配置自定义证书为例,除自定义证书外,您也可以配置云端证书,例如将ca1.crt替换为ApsaraDB-CA-Chain.pem

  6. 单击Save

    若连接信息无误,会出现如下界面,则表示连接成功。阿里云RDS数据库SSL连接RDS PostgreSQL数据库-云淘科技

    重要

    postgres是RDS实例默认的系统数据库,请勿在该数据库中进行任何操作。

psql命令行终端SSL连接

说明

本步骤依赖本地PostgreSQL客户端自带的psql命令行工具,请确保您已安装PostgreSQL客户端,具体请参见PostgreSQL官方文档。

  1. 在/var/lib/pgsql目录下创建.postgresql文件夹。

    mkdir /var/lib/pgsql/.postgresql
  2. 将如下文件拷贝到.postgresql文件夹中。

    • (可选)客户端证书(client.crt)、客户端证书私钥(client.key):如果在RDS控制台配置了客户端CA证书,则需要配置,获取方法请参见配置客户端CA证书。

    • 数据库CA证书:获取方法请参见下载CA证书或生成自签名证书。

    cp client.crt client.key ca1.crt /var/lib/pgsql/.postgresql/

    说明

    • 本示例中,客户端证书(client.crt)、客户端证书私钥(client.key)和数据库CA证书(ca1.crt)的文件路径请根据实际情况配置。

    • 本示例以配置自定义证书为例,除自定义证书外,您也可以配置云端证书,例如将ca1.crt替换为ApsaraDB-CA-Chain.pem

  3. 修改.postgresql文件夹权限。

    chown postgres:postgres /var/lib/pgsql/.postgresql/*
    chmod 600 /var/lib/pgsql/.postgresql/*
  4. 使用如下命令编辑postgres用户的环境变量。

    vim /var/lib/pgsql/.bash_profile
  5. 输入i进入编辑模式,补充如下内容。

    export PGSSLCERT="/var/lib/pgsql/.postgresql/client.crt"
    export PGSSLKEY="/var/lib/pgsql/.postgresql/client.key"
    export PGSSLROOTCERT="/var/lib/pgsql/.postgresql/ca1.crt"
  6. 使用Esc退出编辑模式,然后输入:wq保存并退出。

  7. 重新加载环境变量。

    source .bash_profile
  8. 设置连接时客户端对数据库的认证方式。

    export PGSSLMODE="verify-full"

    PostgreSQL数据库开启SSL链路加密后,表示允许客户端通过SSL连接数据库,在客户端连接数据库时,请根据以下场景选择PGSSLMODE参数的取值。

    数据库是否配置客户端访问控制

    是否需要通过SSL连接

    PGSSLMODE取值

    require、verify-ca或verify-full

    disable

    必须使用SSL

    require、verify-ca或verify-full

    说明

    require、verify-ca和verify-full含义如下:

    • require:只对数据链路加密,并不验证数据库的真实性。

    • verify-ca:加密数据链路,同时验证数据库的真实性。

    • verify-full:加密数据链路,验证数据库的真实性,同时比对证书内的CN或DNS与连接时配置的数据库连接地址是否一致。

  9. 连接数据库。

    psql -h  -U  -p  -d 

    各参数在RDS控制台的获取位置:

    参数

    获取方式

    数据库连接地址

    加密的连接地址,通过SSL页面中保护主机参数获取。

    用户名

    通过账号管理页面获取用户名。

    端口号

    默认5432,如果您修改过,通过数据库连接页面获取。

    数据库名

    postgres是RDS实例默认的系统数据库,请勿在该数据库中进行任何操作。如果您需要连接RDS实例下创建的其他数据库,可从数据库管理页面获取。

JDBC SSL连接

  1. 下载如下文件到本地。

    • (可选)客户端证书(client.crt)、客户端证书私钥(client.key):如果在RDS控制台配置了客户端CA证书,则需要获取,获取方法请参见配置客户端CA证书。

    • 数据库CA证书:获取方法请参见下载CA证书或生成自签名证书。

  2. 将客户端私钥(client.key)转换为pk8格式。

    openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
    # 需要输入密码,连接时需要使用
    Enter Encryption Password:
    Verifying - Enter Encryption Password:

    警告

    该命令必须在应用程序所在设备上执行,使用应用程序所在设备上的openssl命令将私钥转换为pk8格式,否则可能提示如下报错:

    • org.postgresql.util.PSQLException: Could not decrypt SSL key file C:/Users/XXX/XXX/client.pk8

    • org.postgresql.util.PSQLException: SSL error: Received fatal alert: unexpected_message

  3. 以Maven项目为例,在pom.xml中导入PostgreSQL的Maven依赖。

     
        org.postgresql
        postgresql
        42.2.10
      
  4. 在业务代码中编写JDBC SSL连接PostgreSQL。

    说明

    本示例以配置自定义证书为例,除自定义证书外,您也可以配置云端证书,例如将ca1.crt替换为ApsaraDB-CA-Chain.pem

     // 设置RDS PostgreSQL实例的连接地址     
     String hostname = "pgm-bpxxxxx.pg.rds.aliyuncs.com";   
     // 设置RDS PostgreSQL实例的连接端口
     String port = "5432";   
     // 设置待连接的数据库名
     String dbname = "postgres";  
    
     String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname+"?binaryTransfer=true";
    
     Properties properties = new Properties();
     // 设置连接数据库的用户名
     properties.setProperty("user", "username"); 
     //设置连接数据库的密码
     properties.setProperty("password", "*****");   
     // 设置证书存放路径 
     String path= "D:\ssl\"; 
    
     // 配置以SSL访问
     properties.setProperty("ssl", "true");
     //设置证书授权机构的公钥名
     properties.setProperty("sslrootcert", path + "/" + "ca1.crt");
     //设置客户端证书私钥名
     properties.setProperty("sslkey", path + "/" + "client.pk8");  
     //设置客户端证书名
     properties.setProperty("sslcert", path + "/" + "client.crt");  
     //填写将私钥key格式转换为pk8格式时设置的密码
     properties.setProperty("sslpassword", "*****"); 
    
     // 配置SSL模式,可选值为require、verify-ca、verify-full
     properties.setProperty("sslmode", "verify-ca"); 
    
      try {
          Class.forName("org.postgresql.Driver");
          Connection connection = DriverManager.getConnection(jdbcUrl, properties);
          //本示例中,假设在postgres数据库中存在表example,此处以查询表example数据为例。
          PreparedStatement preparedStatement = connection.prepareStatement("select * from " +
                  "example");
          ResultSet resultSet = preparedStatement.executeQuery();
          while (resultSet.next()) {
              ResultSetMetaData rsmd = resultSet.getMetaData();
              int columnCount = rsmd.getColumnCount();
              Map map = new HashMap();
              for (int i = 0; i < columnCount; i++) {
                  map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1));
              }
              System.out.println(map);
          }
      } catch (Exception exception) {
          exception.printStackTrace();
      }

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/155683.html

(0)
上一篇 2023年12月9日 下午7:44
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云对象存储任务回调

    功能说明 数据万象支持自定义设置回调 URL,在任务完成后,系统向该 URL 发送 HTTP POST 请求,请求体中包含通知内容。您可通过配置的回调地址及时了解任务处理的进展和状态,以便进行其他业务操作。 回调内容 任务完成后,系统会向您设置的回调地址发送回调内容,包含完整节点数据的内容展示如下: TaskFinish Success 2022-07-18…

    腾讯云 2023年12月9日
  • 腾讯云对象存储文件处理概述

    概述 针对存储在 COS 上的所有文件,提供解压、打包压缩、哈希值计算等文件处理功能,目前支持的处理功能请见下表: 功能 说明 文件解压 支持对压缩包文件进行云上解压,解压后转存至 COS,当前支持的压缩包格式有 zip、tar、rar、gz、7zip。文件大小限制说明:小于5TB 的文件。 压缩包预览 支持对压缩包文件进行预览,无需解压整个文件即可预览压缩…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云容器服务Cerberus 说明同尘科技

    组件介绍 Cerberus 组件支持对签名镜像进行可信验证,确保在 TKE 集群中只部署可信授权方签名的容器镜像,降低在容器环境中的镜像安全风险。 部署在集群内的 Kubernetes 对象 Kubernetes 对象名称 类型 请求资源 所属 Namespace cerberus-webhook Deployment 每个实例 CPU 0.5C,Memor…

    2023年12月9日
  • 腾讯云对象存储存储桶标签

    简介 本文档提供关于存储桶标签的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket tagging 设置存储桶标签 为已存在的存储桶设置标签 GET Bucket tagging 查询存储桶标签 查询指定存储桶下已有的存储桶标签 DELETE Bucket tagging 删除存储桶标签 删除指定的存储桶标签 SDK AP…

    腾讯云 2023年12月9日
  • 腾讯云Serverless应用中心账号和权限配置-同尘科技

    本文为您介绍 Serverless Cloud Framework 的几种授权方式以及通过配置子账号权限进行实际操作演示。 前提条件 Serverless Cloud Framework 帮助您将项目快速部署到腾讯云 Serverless 应用中心,因此在部署前,请确认您已经 注册腾讯云账号 并完成 实名认证。 授权方式 扫码一键授权 通过 scf depl…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。