使用 OpenSSL s_client 通过 SSL 连接到 PostgreSQL

使用 OpenSSL s_client 通过 SSL 连接到 PostgreSQL

我正在尝试使用 XP 上的 OpenSSL 中的 SSL 连接到 AWS 上的 PostgreSQL 服务器s_client。我可以使用它连接到第三方s_client。在服务器和 XP 上,我都在使用 openssl 版本 0.9.8.k。

当我尝试连接到我的服务器时,我得到结果:

CONNECTED(00000003) 2036:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188 :

在 Postgres 日志中,我看到以下条目:

2009-10-30 13:58:08 UTC LOG: invalid length of startup packet

我很感激任何关于如何实现这一点的建议。也许有一个公共 AWS 映像可以让我查看,PostgreSQL 已知可以在该映像上运行?

答案1

你没有指定为什么你想使用客户端

如果要相互影响有了数据库,任何像样的客户端都可以。psql可以使用sslmode=require选项调用。请参阅man psql

如果要检查 SSL 证书(这也是我遇到你的问题的原因),它仍然不适用于客户端正如马格努斯7年前指出的那样。openssl s_client如果您的版本 >= 1.1.1,现在就可以这样做,正如 Adam Batkin 的回答所指出的那样。使用openssl version来检查,或者直接尝试这个命令看看它是否有效。

echo "" | openssl s_client -starttls postgres -connect EXAMPLE.COM:5432 -showcerts

如果您有一个不支持 postgres 的旧版本,这个 python 脚本也可以检索 SSL 证书:https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py

例如检查证书日期:

postgres_get_server_cert.py example.com:5432 | openssl x509 -noout -dates

答案2

看起来 OpenSSL 的s_client工具-starttls在 1.1.1 中添加了对 Postgres 的支持,因此您现在可以使用 OpenSSL 命令行工具的全部功能,而无需额外的帮助脚本:

> openssl s_client -starttls postgres -connect my.postgres.host:5432 # etc...

参考:

答案3

您不能使用客户端. PostgreSQL 进行协议协商SSL 已启动(以确定是否应该使用 SSL,因为它们都在同一端口上运行)。您需要使用合适的 PostgreSQL 客户端(例如查询语言或者管理员,例如),而不是客户端

相关内容