使用 OpenSSL s_client 通过 SSL 连接到 PostgreSQL

Mit*_*tch 8 postgresql openssl

我正在尝试使用来自s_clientXP 上OpenSSL 的 SSL 连接到 AWS 上的 PostgreSQL 服务器。我可以使用这个连接到第三方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 上工作?

miv*_*ivk 15

您没有说明为什么要使用s_client

如果是与数据库交互,任何像样的客户端都可以。psql可以用sslmode=require选项调用。见man psql

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

echo "" | openssl s_client -starttls postgres -connect EXAMPLE.COM:5432 -showcerts
Run Code Online (Sandbox Code Playgroud)

如果你有一个不支持 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
Run Code Online (Sandbox Code Playgroud)

  • 使用最新版本 macOS 的用户需要使用安装了 homebrew 的软件;安装的 `openssl` 版本不支持 `postgres` 选项 (2认同)

小智 9

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

> openssl s_client -starttls postgres -connect my.postgres.host:5432 # etc...
Run Code Online (Sandbox Code Playgroud)

参考:


Mag*_*der 7

您不能使用s_client。PostgreSQLSSL 启动之前进行协议协商(以确定它是否应该进行 SSL,因为它们都运行在同一个端口上)。您需要使用合适的 PostgreSQL 客户端(例如psqlpgadmin),而不是s_client