RDS PostgreSQL在配置SSL链路加密时,不仅支持使用阿里云提供的云端证书,还支持使用自定义证书。本文介绍如何通过自定义证书开启SSL链路加密功能的具体操作。
前提条件
实例版本为RDS PostgreSQL 10或以上的云盘版本。
说明暂不支持计费方式为Serverless的实例。
已安装OpenSSL工具。
说明如果您使用Linux系统,系统会自带OpenSSL工具,无需安装。如果您使用Windows系统,请获取OpenSSL软件包并安装。
注意事项
开启SSL链路加密后,会造成CPU使用率上升、读写时延增长。
开启SSL链路加密后,已有连接需要断开重连,加密才会生效。
配置自定义证书、更改自定义证书内容或关闭SSL链路加密,将会重启您的数据库实例,用时3分钟左右,请在业务低峰期操作。
步骤一:获取自定义证书
生成服务器证书私钥或自签名证书私钥时,请勿使用密码加密,否则将无法启用SSL链路加密。
本文以CentOS系统配置为例,如果您使用Windows操作系统,操作步骤中的openssl
命令与CentOS系统中的openssl
命令配置相同,cp
命令请替换为手动复制,vim
命令请替换为手动编辑文件。
创建自签名证书(server-ca.crt)和自签名证书私钥(server-ca.key)。
openssl req -new -x509 -days 365 -nodes -out server-ca.crt -keyout server-ca.key -subj "/CN=root-server-ca"
生成服务器证书请求文件(server.csr)和服务器证书私钥(server.key)。
自定义证书支持对一个连接地址或多个连接地址进行保护。您可以根据需要选择以下两种配置生成服务器证书请求文件。
如果您需要保护一个连接地址,请配置如下命令。
openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=pgm-bpxxxxx.pg.rds.aliyuncs.com"
说明本示例中
pgm-bpxxxxx.pg.rds.aliyuncs.com
仅用于举例,请修改为需要保护的链接地址,查看连接地址请参见查看或修改连接地址和端口。如果您需要保护多个连接地址,请配置如下命令。
拷贝openssl配置文件,作为临时使用。
cp /etc/pki/tls/openssl.cnf /tmp/openssl.cnf
说明如果您使用Windows系统,openssl.cnf文件位于openssl安装目录\bin\cnf目录下,可以将此文件拷贝到任意位置。
使用如下命令编辑临时拷贝出的openssl.cnf文件。
vim /tmp/openssl.cnf
输入
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
使用
Esc
退出编辑模式,输入:wq
保存并退出。生成服务器证书请求文件(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
不需要输入
-
生成服务器证书(server.crt)。
如果您需要保护一个连接地址,请配置如下命令。
openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt
如果您需要保护多个连接地址,请配置如下命令。
openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt -extensions v3_req -extfile /tmp/openssl.cnf
完成以上配置后,执行ls命令,查看已生成的文件:
# ls
server-ca.crt server-ca.key ca.srl server.crt server.csr server.key
关键文件解释如下:
server.crt:服务器证书文件。
server.key:服务器私钥文件。
server-ca.crt:自签名证书。
server-ca.key:自签名证书私钥。
步骤二:使用自定义证书开启SSL链路加密
配置自定义证书后,实例的运行状态将会变更为修改SSL中,该状态将持续三分钟左右,请耐心等待运行状态变更为运行中后再进行后续操作。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
进入 >SSL页面。
切换证书来源为使用自定义证书,单击配置数据库证书(防止伪装数据库)后的配置按钮,填写服务器证书及私钥,然后单击确定,完成配置。
参数
取值
服务器证书
此参数填写步骤一:获取自定义证书步骤中获取的server.crt文件内容。请填写-----BEGIN CERTIFICATE-----至-----END CERTIFICATE-----间的内容,包括BEGIN和END部分。
服务器证书私钥
此参数填写步骤一:获取自定义证书步骤中获取的server.key文件内容。请填写-----BEGIN PRIVATE KEY-----至-----END PRIVATE KEY-----间的内容,包括BEGIN和END部分。
如果申请证书时配置了多个连接地址,则配置完成后,在保护主机参数中,将显示对应多条记录。
步骤三:客户端连接数据库
RDS PostgreSQL数据库支持通过SSL远程连接,更多信息,请参见使用SSL链路连接RDS PostgreSQL数据库。
步骤四:(可选)更新证书
更新证书会重启实例,请谨慎操作。
如果您需要更新证书,可以在SSL页面单击配置数据库证书(防止伪装数据库)后的修改按钮,填入新的服务器证书和私钥。
步骤五:(可选)关闭SSL链路加密
关闭SSL加密会重启实例,请谨慎操作。
如果您需要关闭SSL链路加密,可以在SSL页面单击关闭SSL按钮。