具有 TLS/SSL 客户端和服务器连接的 pgbouncer 1.7
pgbouncer 1.7 with TLS/SSL client and server connections
使用从类似服务器 运行 Postgres 9.4.1 & pgbouncer 1.6.1 借用的设置,我有多个用户通过端口 6543 上的 pgbouncer 连接到数据库。我还有第二台服务器 运行 PostgreSQL 9.4.5 我已经验证所有用户只能使用 TLS/SSL 设置为 verify-full
直接连接到数据库(在端口 5432 上)。
但是,我需要创建一个结合这些配置的环境:所有用户都通过 TLS/SSL 连接到数据库,并通过 pgbouncer 进行连接池。这意味着我需要在最近发布的(截至 2015 年 12 月 18 日)pgbouncer 1.7 中使用新的 TLS/SSL 功能,但除了 the new TLS parameters 的文档外,我还没有找到任何可用的示例来演示新功能我自己在第二台服务器上使用 TLS/SSL 通过 pgbouncer 建立有效连接也没有取得任何成功。
我已经从我的第二个服务器中收录了 postgresql.conf
、pg_hba.conf
和 pgbouncer.ini
的相关摘录。
postgresql.conf:
ssl = on # (change requires restart)
ssl_cert_file = 'server.crt' # (change requires restart)
ssl_key_file = 'server.key' # (change requires restart)
ssl_ca_file = 'root.crt' # (change requires restart)
pg_hba.conf:
hostssl all all 10.10.5.0/24 cert
pgbouncer.ini:
;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
logfile = /tmp/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; USER AUTHENTICATION (old way commented out with new lines below)
;auth_type = md5
;auth_file = pgbouncer/users.txt
auth_type = hba
auth_hba_file = pg_hba.conf
; TLS SETTINGS (NEW STUFF!)
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
server_tls_sslmode = verify-full
server_tls_key_file = /tmp/pgb_user.key
server_tls_cert_file = /tmp/pgb_user.crt
server_tls_ca_file = root.crt
pgbouncer 启动,但是,当我尝试以用户 'lalligood' 身份连接时,出现以下错误:
ERROR: no such user: lalligood
pgbouncer.log 每次尝试都包含以下行:
2016-01-13 16:00:36.971 2144 LOG C-0xcad410:
(nodb)/(nouser)@10.10.5.194:54848 closing because: No such user:
lalligood (age=0)
如有必要,我可以提供更多信息。如果有人 advice/suggestions 对我可能忽略的内容有任何帮助,我将非常感谢您的帮助!
我想通了...我(部分?)尝试在 pgbouncer 1.7 中使用太多新功能而感到内疚。
有 TLS/SSL 设置,然后是 HBA 访问控制。 (TLS/SSL 不需要 HBA 访问控制和 vice-versa 即可工作)。此外,由于 pgbouncer 和数据库在同一个盒子上,因此不需要在 pgbouncer 和数据库之间增加 TLS/SSL 的额外开销。
事实证明,简化为仅使用更常用的用户身份验证设置是解决方法。
首先,postgresql.conf
& pg_hba.conf
如上所示保持不变。
pgbouncer.ini
,然而,是这样的:
;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
auth_type = cert
auth_file = pgbouncer/users.txt
logfile = /var/lib/pgsql/pgbouncer.log
pidfile = /var/lib/pgsql/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; TLS settings
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
因此具体的更改是 auth_type = cert
& auth_file = pgbouncer/users.txt
(changing/removing HBA 引用)& 在末尾删除 4 server_tls_...
行。
用户使用 SSL 证书向 pgbouncer 和 postgres 数据库进行身份验证。
这 也 意味着我必须将在 ./pgbouncer/users.txt
中通过 pgbouncer 的用户列表放在一起。格式应该是这样的(对于每个用户):
"lalligood" ""
因为 pgbouncer 不会根据密码验证任何连接。
所以这一切意味着 TLS/SSL authentication/connectivity 通过 pgbouncer 工作。但这也让我觉得 auth_type = hba
/ auth_hba_file = pg_hba.conf
充其量是可疑的;最坏情况下无法正常工作。
使用从类似服务器 运行 Postgres 9.4.1 & pgbouncer 1.6.1 借用的设置,我有多个用户通过端口 6543 上的 pgbouncer 连接到数据库。我还有第二台服务器 运行 PostgreSQL 9.4.5 我已经验证所有用户只能使用 TLS/SSL 设置为 verify-full
直接连接到数据库(在端口 5432 上)。
但是,我需要创建一个结合这些配置的环境:所有用户都通过 TLS/SSL 连接到数据库,并通过 pgbouncer 进行连接池。这意味着我需要在最近发布的(截至 2015 年 12 月 18 日)pgbouncer 1.7 中使用新的 TLS/SSL 功能,但除了 the new TLS parameters 的文档外,我还没有找到任何可用的示例来演示新功能我自己在第二台服务器上使用 TLS/SSL 通过 pgbouncer 建立有效连接也没有取得任何成功。
我已经从我的第二个服务器中收录了 postgresql.conf
、pg_hba.conf
和 pgbouncer.ini
的相关摘录。
postgresql.conf:
ssl = on # (change requires restart)
ssl_cert_file = 'server.crt' # (change requires restart)
ssl_key_file = 'server.key' # (change requires restart)
ssl_ca_file = 'root.crt' # (change requires restart)
pg_hba.conf:
hostssl all all 10.10.5.0/24 cert
pgbouncer.ini:
;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
logfile = /tmp/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; USER AUTHENTICATION (old way commented out with new lines below)
;auth_type = md5
;auth_file = pgbouncer/users.txt
auth_type = hba
auth_hba_file = pg_hba.conf
; TLS SETTINGS (NEW STUFF!)
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
server_tls_sslmode = verify-full
server_tls_key_file = /tmp/pgb_user.key
server_tls_cert_file = /tmp/pgb_user.crt
server_tls_ca_file = root.crt
pgbouncer 启动,但是,当我尝试以用户 'lalligood' 身份连接时,出现以下错误:
ERROR: no such user: lalligood
pgbouncer.log 每次尝试都包含以下行:
2016-01-13 16:00:36.971 2144 LOG C-0xcad410:
(nodb)/(nouser)@10.10.5.194:54848 closing because: No such user:
lalligood (age=0)
如有必要,我可以提供更多信息。如果有人 advice/suggestions 对我可能忽略的内容有任何帮助,我将非常感谢您的帮助!
我想通了...我(部分?)尝试在 pgbouncer 1.7 中使用太多新功能而感到内疚。
有 TLS/SSL 设置,然后是 HBA 访问控制。 (TLS/SSL 不需要 HBA 访问控制和 vice-versa 即可工作)。此外,由于 pgbouncer 和数据库在同一个盒子上,因此不需要在 pgbouncer 和数据库之间增加 TLS/SSL 的额外开销。
事实证明,简化为仅使用更常用的用户身份验证设置是解决方法。
首先,postgresql.conf
& pg_hba.conf
如上所示保持不变。
pgbouncer.ini
,然而,是这样的:
;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
auth_type = cert
auth_file = pgbouncer/users.txt
logfile = /var/lib/pgsql/pgbouncer.log
pidfile = /var/lib/pgsql/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; TLS settings
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
因此具体的更改是 auth_type = cert
& auth_file = pgbouncer/users.txt
(changing/removing HBA 引用)& 在末尾删除 4 server_tls_...
行。
用户使用 SSL 证书向 pgbouncer 和 postgres 数据库进行身份验证。
这 也 意味着我必须将在 ./pgbouncer/users.txt
中通过 pgbouncer 的用户列表放在一起。格式应该是这样的(对于每个用户):
"lalligood" ""
因为 pgbouncer 不会根据密码验证任何连接。
所以这一切意味着 TLS/SSL authentication/connectivity 通过 pgbouncer 工作。但这也让我觉得 auth_type = hba
/ auth_hba_file = pg_hba.conf
充其量是可疑的;最坏情况下无法正常工作。