Как прервать OpenSSL s_client после подключения

(Рецензенты: я также знаю, что это заблуждение на территории SuperUser, но если предыдущий вопрос проскользнул...:))

Это очень похоже на этот вопрос, но в среде Windows (7/8/Server 2008/2012): я использую порт Windows OpenSSL.

Я запускаю

openssl s_client -connect 192.168.0.1:443

из командной строки, чтобы отобразить информацию сертификата. Однако после этого openssl ждет ввода пользователя; Я могу Ctrl + C "разбить" вывод, или каждый просто набирать несколько символов и нажимать return, но мне нужно автоматизировать это - все, что меня действительно интересует, это информация о сертификате.

Как и в предыдущем вопросе, мне нужно каким-то образом прекратить/закрыть соединение. Тем не менее, я попытался подключиться к входным файлам, echo ing/type ing ввода в микс, и ничто не похоже на имитацию реального пользователя. Может ли кто-нибудь показать мне, как заставить openssl выйти после подключения?

Ответ 1

Вы можете добиться желаемого эффекта, используя трубу для передачи символа "Q". Это делает для одной строки для сценария:

echo "Q" | openssl s_client -connect host:port

Если вы используете достаточно новую версию BASH, вы также можете использовать тройное перенаправление меньше чем вместо конвейера (иногда канал не может использоваться, так как он работает с stdin/stdout):

openssl s_client -connect host:port <<< "Q"

Ответ 2

Ввод буквы "Q" в начале пустой строки приведет к завершению активного соединения. Я видел, как s_client попадает в состояния, где это ничего не делает, но это документированный способ выхода из сеанса.

Если вы хотите сделать это в пакетном режиме, просто создайте текстовый файл с буквой "Q", за которым следует возврат каретки, и направьте его в конец команды следующим образом:

openssl s_client -connect host:port < Q.txt

Я пробовал это, и он работает.