![使用 OpenSSL s_client 通过 SSL 连接到 PostgreSQL](https://linux22.com/image/497450/%E4%BD%BF%E7%94%A8%20OpenSSL%20s_client%20%E9%80%9A%E8%BF%87%20SSL%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20PostgreSQL.png)
我正在尝试使用 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 客户端(例如查询语言或者管理员,例如),而不是客户端。