SSL 加密传输

数据传输层加密用来加密客户端与数据库服务器之间的通信,增强数据传输安全性。可以通过 pg_hba.conf 配置文件允许管理员指定客户端和服务器之间的链接加密方式。

SSL 连接可以加密网络传输中的所有数据,包括:密码、查询语句以及返回的结果。客户端可以强制通过 SSL 连接到服务器。

配置说明

注意!
SSL 连接加密要求在客户端和服务器端都安装 OpenSSL 并且在编译时打开这个支持。

  • pg_hba.conf 的配置示例如下:
hostssl  all             mxadmin         10.51.0.40/32           scram-sha-256

使用示例

  1. 安装 openssl

    sudo yum install openssl openssl-devel
  2. 进入集群目录使用 openssl 签发证书

    cd $MASTER_DATA_DIRECTORY
  3. 生成 server 请求证书

    openssl req -new -text -out server.req

    注意!
    PEM pass phrase 不能为空,如输入 123456,其他可以为空

  4. 生成用口令保护的密钥,并解锁

    openssl rsa -in privkey.pem -out server.key

    注意!
    输入上面输入的 PEM pass phrase 的值

  5. 把证书变成自签名证书。

    openssl req -x509 -in server.req -text -key server.key -out server.crt
  6. 提高密钥权限

    chmod og-rwx server.key
  7. 配置 YMatrix 服务器。将 postgresql.conf 中的 ssl 设置为 on,让 YMatrix 服务器带着 SSL 支持启动。

    gpconfig -c ssl -v off -m on
    gpstop -u
    gpconfig -s ssl 
  8. 使用 tcpdump 抓包

    tcpdump -i enp33s0f0 -nn port 5432 -w /tmp/http.tcpdump
  9. 客户端验证 ssl 连接是否生效(使用另外一台机器当客户端)

    psql -h dev-150 -p 5432 -d postgres -U mxadmin
  10. 创建表,并插入数据

    create table abcd(a text);
    insert into abcd values('123456789');
  11. 使用 wireshark 打开抓包文件
    在 wireshark 上抓的包中查找插入的数据‘123456789’式样的字符(无法找到该字段)

    sudo yum -y install wireshark 
    sudo yum -y install wireshark-gnome
    wireshark /tmp/http.tcpdump

效果对比

  • ssl = no
    ssl01 ssl02

  • ssl = off
    ssl03