pgsql使用OpenSSL添加ssl加密

openssl.mdgit

服务端

  • 查看当前目录 openssl version -d
  • 生成签名的key
openssl req -new -text -out server.req -subj '/C=CN/ST=Zhejiang/L=Hangzhou/O=dbpaas/CN=dbpaas-ip-port' -passout pass:'xxx'

    -passourt  意思是对输出文件的加密密码
  • 删除passphrase
openssl rsa -in privkey.pem -out server.key  -passin pass:'xxx'
        -passin  这里是设置输入文件须要的密码
rm -f privkey.pem
  • turn the certificate into a self-signed certificate and to copy the key and certificate to where the server will look for them
openssl req -x509 -in server.req -text -key server.key -out server.crt
  • 修改权限
chmod 600 server.key
  • 拷贝
mv -f server.crt server.key $PGDATA
  • 修改参数
ssl = on 
ssl_cert_file = 'server.crt'              # (change requires restart)
ssl_key_file = 'server.key' 

下面的不用改,pg默认
ssl_ciphers = 'DEFAULT:!LOW:!EXP:!MD5:@STRENGTH'        # allowed SSL ciphers
                                            # (change requires restart)
ssl_renegotiation_limit = 512MB   # amount of data between renegotiations
  • 重启数据库
pg_ctl restart -m fast

会有 SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
  • 用ssl插件 sslinfo 查看ssl相关信息
create extension sslinfo;
    CREATE EXTENSION
digoal=# select ssl_is_used();
 ssl_is_used 
-------------
 t
(1 row)
digoal=# select ssl_cipher();
     ssl_cipher     
--------------------
 DHE-RSA-AES256-SHA
(1 row)
digoal=# select ssl_version();
 ssl_version 
-------------
 TLSv1
(1 row)
  • 能够设置pg_hba.conf强制使用ssl链接数据库
    • 把之前的host改成hostssl这就是强制客户端使用ssl链接 eg: hostssl all all 0.0.0.0/0 md5
    • 使用host的话优先使用ssl认证
    • hostnossl 强制不使用ssl

客户端

  • 客户端也要有openssl包,而后客户端能够设置强制使用仍是不使用ssl
psql "sslmode=require" -h 172.16.3.33 -p 1999 -U postgres -d pg

psql "sslmode=disable" -h 172.16.3.33 -p 1999 -U postgres -d pg

注意

  • 只在主库上建立就行了,只要用到basebackup的都会拷贝相关的这两个文件

参考: https://github.com/digoal/blog/blob/master/201305/20130522_01.md https://www.jianshu.com/p/15b1d935a44bgithub