postgresql配置ssl
  IE5LYMWlmdvL 2023年11月02日 48 0

概念描述

SSL可以防止信息在传输过程中被窃听和篡改,openssl就是目前比较流行、成熟的ssl密码库工具。
SSL在远程连接的时候就不再需要输入密码。

配置过程

一、准备

查看系统是否安装openssl

# rpm -qa |grep openssl-devel
openssl-devel-1.0.2k-19.0.1.el7.x86_64

查看postgresql软件编译安装时是否带“–with-openssl”参数

$ pg_config | grep ssl
CONFIGURE = '--prefix=/usr/local/pg12.9' '--with-openssl'
LIBS = -lpgcommon -lpgport -lpthread -lssl -lcrypto -lz -lreadline -lrt -lcrypt -ldl -lm

-- 在数据库中也能查到:
postgres=# show ssl_library;
 ssl_library
-------------
 OpenSSL
(1 row)

二、配置ssl单向认证
只要服务端创建证书和私钥即可。
1.配置生成证书和私钥文件

mkdir ~/openssl_crw    # 创建存放文件夹
cd ~/openssl_crw
openssl req -new -x509 -days 365  -nodes -text -subj '/CN=postgres' -out server.crt -keyout server.key   ## 生成证书和私钥文件
chmod 600 ~/openssl/server.key    ## 必须设置,否则重启pg会报错

2.修改postgresql.conf配置文件

$ cat postgresql.conf | grep ssl |grep -v "#"
ssl = on
ssl_cert_file = '/home/pg12/openssl_crw/server.crt'
ssl_key_file =  '/home/pg12/openssl_crw/server.key'

# 修改完成后,重启pg

3.验证远程登入时使用ssl连接

postgresql配置ssl_postgresql

4.查看当前会话是否使用ssl连接

postgres=# create extension sslinfo;   ## 需要先创建此扩展ssl信息,否则select ssl_is_used();无法执行成功。
CREATE EXTENSION
postgres=# select ssl_is_used();
 ssl_is_used
-------------
 t
(1 row)

 ## 注意:如果是本地连接,则显示结果为“f”,因为本地连接不会使用ssl。

5.远程登入时可以手动指定需要ssl连接

$ psql 'host=localhost user=pg12 dbname=postgres password=1qaz@WSX sslmode=require'    ##当然不加ssl参数,也是默认会使用ssl连接
psql (12.9)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=# select ssl_is_used();
 ssl_is_used
-------------
 t
(1 row)

三、ssl双向认证
服务端、客户端都要创建私钥、证书、根证书。
1.服务器端
1.1.生成服务器端的私钥:

$ mkdir ~/openssl_shuangxiang_server
$ cd  ~/openssl_shuangxiang_server
$ openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
........................................+++
.............+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
$ openssl rsa -in server.key -out server.key    ## 去掉上面这个证书的密码保护功能
Enter pass phrase for server.key:
writing RSA key

$ chmod 400 server.key

1.2.生成服务器端的证书 和 根证书

$ openssl req -new -key server.key -days 365 -out server.crt -x509 -subj '/C=CN/ST=Fujian/L=Fuzhou/O=enmo/CN=crw/emailAddress=crw@enmo.com'
--由于没有公证机构提供,只能使用自签名证书,因此可以将服务器证书作为根证书。
$ cp  server.crt  root.crt

1.3.修改postgresql.conf配置文件

$ cat postgresql.conf | grep ssl |grep -v "#"
ssl = on
ssl_ca_file = '/home/pg12/openssl_shuangxiang_server/root.crt'
ssl_cert_file = '/home/pg12/openssl_shuangxiang_server/server.crt'
ssl_key_file = '/home/pg12/openssl_shuangxiang_server/server.key'

1.4.修改pg_hba.conf配置文件

postgresql配置ssl_postgresql_02


注意,需要注释掉原有的。修改完成后,重启pg。

2.客户端(可以在服务端生成后拷贝到客户端侧)
##如果客户端没有相关ssl的配置,远程登入时会报错。

$ psql -U pg12 -d postgres -h 192.168.129.133 -p 5666
2023-06-01 11:50:13.242 CST [6940] FATAL:  connection requires a valid client certificate
2023-06-01 11:50:13.245 CST [6941] FATAL:  no pg_hba.conf entry for host "192.168.129.133", user "pg12", database "postgres", SSL off
psql: error: FATAL:  connection requires a valid client certificate
FATAL:  no pg_hba.conf entry for host "192.168.129.133", user "pg12", database "postgres", SSL off

2.1.生成客户端的私钥

$ mkdir ~/openssl_shuangxiang_client
$ cd  ~/openssl_shuangxiang_client
$ openssl genrsa -des3 -out postgresql.key 2048
Generating RSA private key, 2048 bit long modulus
........................................+++
.............+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
$ openssl rsa -in postgresql.key -out postgresql.key    ## 去掉上面这个证书的密码保护功能
Enter pass phrase for server.key:
writing RSA key

$ chmod 400 postgresql.key

2.2.生成客户端的证书postgresql.csr 和 根证书postgresql.crt

$ openssl req -new -key postgresql.key -out postgresql.csr -subj '/C=CN/ST=Fujian/L=Fuzhou/O=enmo_client/CN=pg12/emailAddress=crw@enmo.com'   # CN必须是数据库的用户名
$ openssl x509 -req -in postgresql.csr -CA /home/pg12/openssl_shuangxiang_server/root.crt  -CAkey /home/pg12/openssl_shuangxiang_server/server.key -out postgresql.crt -CAcreateserial
Signature ok
subject=/C=CN/ST=Fujian/L=Fuzhou/O=enmo_client/CN=pg12/emailAddress=crw@enmo.com
Getting CA Private Key

2.3.复制客户端证书到当前用户的.postgresql目录下

$ mkdir ~/.postgresql
$ cp /home/pg12/openssl_shuangxiang_client/* ~/.postgresql
[pg12@localhost openssl_shuangxiang_client]$ ll ~/.postgresql
total 12
-rw-rw-r-- 1 pg12 pg12 1216 Jun  1 12:19 postgresql.crt
-rw-rw-r-- 1 pg12 pg12 1017 Jun  1 12:19 postgresql.csr
-r-------- 1 pg12 pg12 1675 Jun  1 12:19 postgresql.key

2.4.远程登入验证测试:

[pg12@localhost openssl_shuangxiang_client]$ psql -U pg12 -d postgres -h 192.168.129.133
psql (12.9)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

注意,也可以指定环境变量,删除~/.postgresql,再如下export PGSSLCERT=/xx/postgresql.crt;export PGSSLKEY=/xx/postgresql.key

postgresql配置ssl_openssl_03

注意,也可以远程登入时手动指定,删除~/.postgresql,重新登入session使环境变量失效,最后登入如下:

psql postgresql://pg12@192.168.129.133:5666/postgres?ssl=true\&sslrootcert=/home/pg12/openssl_shuangxiang/root.crt\&sslkey=/home/pg12/openssl_shuangxiang_client/postgresql.key\&sslcert=/home/pg12/openssl_shuangxiang_client/postgresql.crt
# pg12是pg系统用户

postgresql配置ssl_openssl_04

在window端使用工具连接时如Navicat,需要指定三个文件,如下:

postgresql配置ssl_postgresql_05

如上就是postgresql上配置ssl的全部内容。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  c4lKJfwN1Ht0   2023年11月13日   74   0   0 PostgreSQLvimsql
  17eFBvSPo0pz   2023年11月19日   30   0   0 PostgreSQL
  hHWnOnebRjW2   2023年11月27日   29   0   0 PostgreSQLsqlbash
  PVzDp58rtCI5   2023年11月13日   125   0   0 PostgreSQL.net
  jLXKB6vexBrB   2023年11月13日   29   0   0 SSL抓包钥匙串
IE5LYMWlmdvL