RDS PostgreSQL在配置SSL链路加密时,不仅支持使用阿里云提供的云端证书,还支持使用自定义证书。本文介绍通过自定义证书配置SSL链路加密功能的具体操作。

前提条件

  • 实例版本为RDS PostgreSQL 10或以上的云盘版本。
  • 已安装OpenSSL工具。
    说明 如果您使用Linux系统,系统会自带OpenSSL工具,无需安装。如果您使用Windows系统,请获取OpenSSL软件包并安装。

注意事项

  • 开启SSL链路加密后,会造成CPU使用率上升、读写时延增长。
  • 开启SSL链路加密后,已有连接需要断开重连,加密才会生效。
  • 配置自定义证书、更改自定义证书内容或关闭SSL链路加密,将会重启您的数据库实例,用时约3分钟左右,请在业务低峰期操作。

步骤一:获取自定义证书

注意 生成服务器证书私钥或自签名证书私钥时,请勿使用密码加密,否则将无法启用SSL链路加密。

本文以CentOS系统配置为例,如果您使用Windows操作系统,操作步骤中的openssl命令与CentOS系统中的openssl命令配置相同,cp命令请替换为拷贝,vim命令请替换为编辑文件。

  1. 创建自签名证书(ca.crt)和自签名证书私钥(ca.key)。
    openssl req -new -x509 -days 3650 -nodes -out ca.crt -keyout ca.key -subj "/CN=root-ca"
  2. 生成服务器证书请求文件(server.csr)和服务器证书私钥(server.key)
    自定义证书支持对一个连接地址或多个连接地址进行保护。您可以根据需要选择以下两种配置生成服务器证书请求文件。
    • 如果您需要保护一个连接地址,请配置如下命令。
      openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=pgm-bpxxxxx.pg.rds.aliyuncs.com"
    • 如果您需要保护多个连接地址,请配置如下命令。
      1. 拷贝openssl配置文件,作为临时使用。
        cp /etc/pki/tls/openssl.cnf  /tmp/openssl.cnf
        说明 如果您使用Windows系统,openssl.cnf文件位于openssl安装目录\bin\cnf目录下,可以将此文件拷贝到任意位置。
      2. 使用如下命令编辑临时拷贝出的openssl.cnf文件。
        vim /tmp/openssl.cnf
      3. 输入i进入编辑模式,配置以下内容。
        # 在[ req ]最后补充
        req_extensions = v3_req
        
        # 新增[ v3_req ]
        [ v3_req ]
        basicConstraints = CA:FALSE
        keyUsage = nonRepudiation, digitalSignature, keyEncipherment
        subjectAltName = @alt_names
        
        # 新增[ alt_names ],其中DNS后配置需要保护的数据库连接地址
        [ alt_names ]
        DNS.1 = pgm-bpxxxxx.pg.rds.aliyuncs.com
        DNS.2 = pgm-bpxxxxx.pg.rds.aliyuncs.com
      4. 使用Esc退出编辑模式,输入:wq保存并退出。
      5. 生成服务器证书请求文件(server.csr)和服务器证书私钥(server.key)。
        openssl req -new -nodes -text -out server.csr -keyout server.key -config /tmp/openssl.cnf
        生成证书请求文件(server.csr)的过程中,会提示配置以下参数,请根据实际情况配置。
        参数 说明 示例
        Country Name ISO国家代码(两位字符) CN
        State or Province Name 所在省份 ZheJiang
        Locality Name 所在城市 HangZhou
        Organization Name 公司名称 Alibaba
        Organizational Unit Name 部门名称 Aliyun
        Common Name 申请SSL证书的域名,在openssl.cnf文件中已配置,不需要输入 -
        Email Address 不需要输入 -
        A challenge password 不需要输入 -
        An optional company name 不需要输入 -
  3. 生成服务器证书(server.crt)。
    • 如果您需要保护一个连接地址,请配置如下命令。
      openssl x509 -req -in server.csr -text -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial  -out server.crt
    • 如果您需要保护多个连接地址,请配置如下命令。
      openssl x509 -req -in server.csr -text -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial  -out server.crt -extensions v3_req -extfile /tmp/openssl.cnf
完成以上配置后,将获得如下文件:
  • server.crt:服务器证书文件。
  • server.key:服务器私钥文件。
  • ca.crt:自签名证书。
  • ca.key:自签名证书私钥。

步骤二:使用自定义证书开启SSL链路加密

说明 配置自定义证书后,实例的运行状态将会变更为修改SSL中,该状态将持续三分钟左右,请耐心等待运行状态变更为运行中后再进行后续操作。
  1. 进入数据安全性>SSL页面。
  2. 切换证书来源为使用自定义证书,单击配置数据库证书(防止伪装数据库)后的配置按钮,填写服务器证书及私钥。
    使用自定义证书
    参数 取值
    服务器证书 此参数填写步骤一:获取自定义证书步骤中获取的server.crt文件内容。请填写-----BEGIN CERTIFICATE----------END CERTIFICATE-----间的内容,包括BEGIN和END部分。
    服务器证书私钥 此参数填写步骤一:获取自定义证书步骤中获取的server.key文件内容。请填写-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----间的内容,包括BEGIN和END部分。
    如果申请证书时配置了多个连接地址,则配置完成后,在保护主机参数中,将显示对应多条记录。使用自定义证书

步骤三:客户端连接数据库

步骤四:(可选)更新证书

说明 更新证书会重启实例,请谨慎操作。
如果您需要更新证书,可以在SSL页面单击配置数据库证书(防止伪装数据库)后的修改按钮,填入新的服务器证书和私钥。更新证书

步骤五:(可选)关闭SSL链路加密

说明 关闭SSL加密会重启实例,请谨慎操作。
如果您需要关闭SSL链路加密,可以在SSL页面单击关闭SSL按钮。closessl