机器信息
模拟真实用户环境,准备以下两台机器,用机器一(CLIENT)的psql访问机器二(SERVER)的gpdb cluster。
-
机器1(CLIENT)信息
ip:IP-client
openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017 (2018年以后才有TLS1.3,所以该机器只支持TLS v1.2) -
机器2(SERVER)信息:
ip: IP-server
openssl version: OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022) (该机器支持TLS v1.3)
正常配置pg_hba.conf让IP-client的psql能连接上IP-server。
准备SSL
使用类似前文的方式配置SSL。
注意两边生成的ca.pem需要scp对拷交换。
机器1(CLIENT)使用脚本生成,ca.pem,postgres.pem,postgres.key,客户端通过环境变量配置SSL。
export PGSSLROOTCERT=/home/hyongtao/ssl/ca.pem;
export PGSSLCERT=/home/hyongtao/ssl/postgres.pem;
export PGSSLKEY=/home/hyongtao/ssl/postgres.key;
机器2(SERVER)使用脚本生成,ca.pem, server.pem, server.key。服务器端通过conf配置SSL,并运行gpstop -ar重新启动。配置pg_hba.conf文件如下:
ssl = on
ssl_ca_file = '/home/hyongtao/ssl/ca.pem'
ssl_cert_file = '/home/hyongtao/ssl/server.pem'
#ssl_crl_file = ''
ssl_key_file = '/home/hyongtao/ssl/server.key'
创建一个hyongtao-ssl用户后,配置pg_hba.conf文件如下,
hostssl all hyongtao-ssl 0.0.0.0/0 md5 clientcert=1
对比实验验证GUC ssl_min_protocol_version的有效性
在机器2(SERVER)的postgresql.conf配置GUC,配置后重启
然后在机器1(CLIENT)运行psql连接机器2(SERVER)。
(1)配置GUC ssl_min_protocol_version = ‘TLSv1’
$ psql -h IP-server -U hyongtao-ssl -d gpadmin -p 7000
Password for user hyongtao-ssl:
psql (12.12)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
由于机器1(CLIENT)的openssl最高支持TLV v1.2,满足机器2(SERVER)GUC中最小版本TLSv1的要求,所以能成功连接。
(2)配置GUC ssl_min_protocol_version = ‘TLSv1.3’
$ psql -h IP-server -U hyongtao-ssl -d gpadmin -p 7000
psql: error: SSL error: tlsv1 alert protocol version
FATAL: no pg_hba.conf entry for host "IP-client", user "hyongtao-ssl", database "gpadmin", SSL off
由于机器1(CLIENT)的openssl最高支持TLV v1.2,不满足机器2(SERVER)GUC中最小版本TLS v1.3的要求。所以报错tlsv1 alert protocol version。无法连接。
一些其它信息
当你在机器1(CLIENT)强行设置ssl_min_protocol_version = ‘TLSv1.3’,gpdb将会启动不了,
会出现如下log:
2024-05-14 14:43:57.458976 CST,p3404,th1619179584,0,seg-1,“FATAL”,“XX000”,“ssl_min_protocol_version setting TLSv1.3 not supported by this build”,“ssl_protocol_version_to_openssl”,“be-secure-openssl.c”,1344,1 0xc45494 postgres errstart (elog.c:484)
该机器的openssl版本只能支持到TLS v1.2。




