Postgresql是支持ssl证书的;所在,在通常情况下,postgresql服务端和客户端之间的数据传输是明文传送的,那这就有一定的安全隐患。
如果需要加密需在服务端安装好openssl之后,就可以利用openssl指令生成一对私钥和证书,用以对数据进行加解密,然后再对配置文件稍作修改就可以了。
1. 利用openssl生成私钥和证书,可以写成一个shell脚本来实现。
openssl req -nodes -new -text -subj "/C=CH/ST=Shanghai/L=Jinan/O=HighGo/CN=tbing" -out server.req openssl rsa -in privkey.pem -out ./server.key openssl req -x509 -in server.req -text -key ./server.key -out ./server.crt cp server.* $PGDATA/../data5433/ chmod 600 $PGDATA/../data5433/server.key $PGDATA/../data5433/server.crt
在执行脚本文件前,注意定义好data目录的环境变量。执行脚本后就会发现在data目录下生成两个文件:私钥server.key和证书server.crt。在shell脚本中需要对这两个密钥修改一下权限,否则数据库起动不了。
2. 修改postgresql.conf配置文件,打开ssl连接。
ssl = on ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' ssl_prefer_server_ciphers = on ssl_ecdh_curve = 'prime256v1' ssl_cert_file = 'server.crt' ssl_key_file = 'server.key'
3. 修改pg_hba.conf配置文件,以hostssl方式连接。
hostssl all all 0.0.0.0/0 md5
4 生效配置
select pg_load_conf();
5连接数据库,显示已加密
[postgres@kbj-db-1 ~]$ psql -p5433 -hlocalhost -Upostgreadm -dpdb Password for user ktccadmin: psql (11.4) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help.
6抓包查看
加密前:
tcpdump -t -s 0 -c 20 ip host 172.17.16.12 and 172.17.16.9 and port 5433 -w ./potgresql-ssl_4.cap
加密后: