要在PostgreSQL中使用客户端证书认证:

在PostgreSQL中执行客户端证书认证的步骤如下。

    1. 自己签署服务器证书。

 

    1. $ openssl req -new -x509 -days 3650 -nodes -text -out $PGDATA/server.crt \

 

    1. -keyout $PGDATA/server.key -subj /CN=node-1

 

    1. 生成RSA私钥

 

    1. ……………………………………………….+++++

 

    1. …………………+++++

 

    1. 写入新的私钥到 ‘/var/lib/pgsql/14/data/server.key’

 

    1. —–

-days 是证书的有效期 (天),-subj的CN表示服务器连接时的主机名。

将服务器证书复制为根证书。
$ cp $PGDATA/server.crt $PGDATA/root.crt

编辑postgresql.conf。

$PGDATA/postgresql.conf
listen_addresses = ‘*’
ssl = on
ssl_ca_file = ‘root.crt

通过listen_addresses = ‘*’ 可以接受来自其他主机的连接, ssl = on 来启用SSL连接,ssl_ca_file指定根证书。

编辑pg_hba.conf。

$PGDATA/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
hostssl all all 172.28.128.0/24 cert

TYPE表示SSL连接的类型为hostssl,METHOD可以是cert或任何认证方法和选项,其中clientcert可以是verify-full或verify-ca。verify-ca仅验证证书,verify-full和cert还验证用户名。版本11之前仅支持verify-ca等同于1和cert选项。

为了反映设置更改,请重新启动服务器。
$ /usr/pgsql-14/bin/pg_ctl restart
等待服务器停止处理完成….完成
服务器已停止
等待服务器启动完成….2022-04-12 20:50:25.622 JST [9785] LOG: redirecting log output to logging collector process
2022-04-12 20:50:25.622 JST [9785] HINT: Future log output will appear in directory “log”.
完成
服务器启动完成

创建存储客户端证书的目录。
$ mkdir ~/.postgresql

创建客户端证书。
$ openssl req -new -nodes -text -out ~/.postgresql/postgresql.csr \
-keyout ~/.postgresql/postgresql.key -subj /CN=postgres
生成RSA私钥
……………+++++
…………………+++++
写入新的私钥到 ‘/var/lib/pgsql/.postgresql/postgresql.key’
—–

-subj的CN表示服务器连接时的用户名。

使用服务器证书而不是根证书对客户端证书进行签名。
$ openssl x509 -req -in ~/.postgresql/postgresql.csr -text -days 3650 \
-CA $PGDATA/server.crt -CAkey $PGDATA/server.key -CAcreateserial \
-out ~/.postgresql/postgresql.crt
签名成功
主题=CN = postgres
获取CA私钥

-days指定证书的有效期 (天)。

删除客户端证书的签名请求。
$ rm -f ~/.postgresql/postgresql.csr

复制根证书。
$ cp $PGDATA/root.crt ~/.postgresql

检查是否可以连接到服务器。
$ psql -h node-1
psql (14.2)
SSL连接 (协议: TLSv1.3、加密方式: TLS_AES_256_GCM_SHA384、密钥长度: 256、压缩: 关闭)
输入”help”显示帮助。

postgres=# \q

如果将~/.postgresql目录复制到其他主机上,则可以从其他主机连接。

广告
将在 10 秒后关闭
bannerAds