Postgres walsender及PGBouncer连接TLS加密状态确认问题
问题解答
关于walsender进程未出现在pg_stat_ssl的原因
- walsender默认不禁用加密:PostgreSQL的walsender进程会遵循
postgresql.conf中的ssl = on配置,只要主库启用SSL,复制连接(walsender)就会自动使用SSL加密,除非在pg_hba.conf中针对复制连接明确设置ssl=off。 pg_stat_ssl仅显示活跃连接:该视图只记录当前处于活跃状态的客户端连接对应的进程。如果walsender没有活跃的复制任务(比如备库未发起连接、复制已中断),就不会出现在结果里。可以通过以下SQL关联验证活跃walsender的加密状态:
SELECT s.*, r.* FROM pg_stat_ssl s JOIN pg_stat_replication r ON s.pid = r.pid;
关于PGBouncer连接未出现在pg_stat_ssl的原因
pg_stat_ssl的范围限制:该视图仅记录直接连接到PostgreSQL的进程。PGBouncer作为连接池,是以客户端身份连接PostgreSQL的,所以你在PostgreSQL端看到的是PGBouncer到PostgreSQL的后端连接,而非外部客户端到PGBouncer的连接。- 验证PGBouncer与PostgreSQL的加密状态:你配置的
server_tls_sslmode = require确实用于控制PGBouncer到PostgreSQL的连接加密,从PGBouncer日志中的SSL connection (protocol: TLSv1.3...)可以确认这部分连接已加密。也可以在PostgreSQL端通过以下SQL过滤验证:
SELECT * FROM pg_stat_ssl WHERE application_name = 'pgbouncer';
- 外部客户端到PGBouncer的加密验证:
client_tls_sslmode = require用于控制外部客户端与PGBouncer的连接加密,日志中的login attempt: ... tls=TLSv1.3/TLS_AES_256_GCM_SHA384已证明这部分加密正常。
补充说明
- 你对PGBouncer SSL配置的理解是正确的:
client_tls_*系列参数控制外部客户端与PGBouncer的SSL连接,server_tls_*系列参数控制PGBouncer与PostgreSQL后端的SSL连接。 - 由于你仅启用TLS加密、未使用证书认证,当前无需配置
client_tls_ca_file或server_tls_ca_file,现有配置符合需求。
内容的提问来源于stack exchange,提问作者manasa
相关产品推荐
相关产品推荐

