Назад | Перейти на главную страницу

Подключение к PostgreSQL с помощью SSL с использованием OpenSSL s_client

Я пытаюсь подключиться к своему серверу PostgreSQL на AWS, используя SSL из OpenSSL. s_client на XP. Я могу подключиться к третьему лицу с помощью этого 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?

Вы не указали Зачем ты хотел использовать s_client.

Если это к взаимодействовать с базой данных подойдет любой достойный клиент. psql можно назвать с sslmode=require вариант. Видеть man psql.

Если это к проверьте сертификат SSL (поэтому я и натолкнулся на ваш вопрос), это все еще не работает с s_client как указал Магнус 7 лет назад. теперь ты можешь сделать это с openssl s_client если у вас версия> = 1.1.1, как указано в ответе Адама Баткина. Использовать 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

Вы не можете использовать s_client. PostgreSQL выполняет согласование протокола перед SSL запускается (чтобы выяснить, должен ли он использовать SSL или нет, поскольку они оба работают на одном порте). Вам необходимо использовать подходящий клиент PostgreSQL (например, psql или pgadmin, например), а не s_client.

Похоже, OpenSSL s_client инструмент добавил поддержку Postgres с помощью -starttls в 1.1.1, так что теперь вы можете использовать всю мощь инструментов командной строки OpenSSL без дополнительных вспомогательных скриптов:

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

Ссылки: