openssl зависает и не выходит

Я пытаюсь использовать openssl для получения сертификата, и он, кажется, продолжает висеть. Я провел много исследований, но не все доступные опции работают на Windows.

openssl s_client -showcerts -connect google.com:443 > cert.txt

Я попробовал это:

openssl s_client -connect xyz:443 < quit.txt > cert.txt

куда quit.txt содержит "выход \n" из http://bytes.com/topic/php/answers/8802-automate-openssl-s_client-command-batch-php-script

Это не сработало. Я также посмотрел на сценарии Openssl s_clinet -connect. Принудительно бросить помощь

Я также пытался-prexit

Я также изучил это и не могу заставить его работать: https://serverfault.com/questions/139728/how-to-download-ssl-certificate-from-a-website

У меня все было хорошо! Мне удалось сделать что-то, что я считал невозможным, и такая простая вещь, как эта ошибка, на время остановила меня:(

5 ответов

Решение

Похоже, что некоторые дистрибутивы OpenSSL для Windows ожидают дополнительного нажатия клавиш, независимо от стандартного ввода. Quit.txt корректно попадает в STDIN openssl (сервер получает команду QUIT), но ничего не происходит, пока вы не нажмете какую-либо клавишу.

Эта проблема не существует в версии Cygwin OpenSSL. К сожалению, базовая установка Cygwin занимает около 100 МБ дискового пространства, но вы можете попробовать извлечь только openssl.exe и необходимые библиотеки.

Этот метод работает:

echo QUIT | c:\cygwin\bin\openssl.exe s_client -showcerts -connect google.com:443 > cert.txt

На окнах, просто набрав winpty прежде чем ваша команда openssl сделает свое дело. Так, например, вы можете создать сертификат следующим образом:

winpty openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX

Если вы работаете в Windows под mingw64, вы можете использовать программу winpty, чтобы правильно обернуть терминал

Например, создание псевдонима под псевдонимом bash openssl='winpty openssl.exe'

Тогда openssl s_client -connect бла

Должен работать как ожидалось

По причинам, которые я не совсем понимаю, в моем случае не сработало отображение QUIT или quit\n на входе. Я использую MINGW64 с OpenSSL 1.0.2d в Windows 8.1 и использую openssl для получения сертификатов от серверов внутри скрипта bash. Тем не менее, просто запустить команду openssl в фоновом режиме и немного подождать у меня:

#!/bin/bash

openssl s_client -connect my.server.com:443 -showcerts > output.txt 2>/dev/null &
sleep 2

Данные для отправки на сервер ожидаются при использованииs_clientвариант . В *nix, в началеecho |отправляет CR, чтобыopensslне зависает, например:

      echo | openssl s_client -servername www.microsoft.com -connect www.microsoft.com:443 2>/dev/null  | openssl x509 -noout -subject -issuer -dates
Другие вопросы по тегам