我想检查我的 AWS RDS postgres 实例使用的服务器证书。我执行了以下命令。
openssl s_client -connect <db_domain_name>:5432 -showcerts
它给了我下面的输出,这表明该实例不提供证书。
CONNECTED(00000003)
140121607600016:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
....
....
但是如果我尝试通过
psql
连接到数据库,它会显示它正在使用 SSL。
psql (9.2.24, server 13.7)
WARNING: psql version 9.2, server version 13.0.
Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.
postgres=>
在服务器不提供证书的情况下,psql 如何建立 SSL 连接?如果服务器确实提供了证书,为什么
openssl s_client
检索失败?
虽然 Postgres 使用 TLS,但它不会在连接时立即执行此操作,因为您的命令正在尝试;相反,它首先执行 Postgres 特定的协议,然后启动 TLS。许多其他协议也这样做。 OpenSSL
s_client
支持某些此类协议的 starttls
,但只有 1.1.1 以上版本包含 Postgres。获取最新的 OpenSSL 并使用 s_client -starttls postgres
。 –
戴夫_汤普森_085