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
содержит "quit\n"
от http://bytes.com/topic/php/answers/8802-automate-openssl-s_client-command-batch-php-script
Это не сработало. Я также посмотрел на Openssl s_clinet -connect скрипты. Force quit help
Я также пробовал -prexit
Я также изучил это и не могу заставить его работать:
https://serverfault.com/info/139728/how-to-download-ssl-certificate-from-a-website
Я так хорошо поступал! Мне удалось сделать что-то, что, по моему мнению, было бы невозможным, и простая вещь, подобная этой ошибке, в настоящее время не позволяет мне : (
Ответы
Ответ 1
Похоже, что некоторые дистрибутивы OpenSSL для Windows ожидают дополнительного нажатия клавиши, независимо от стандартного ввода. Quit.txt правильно передается в openssl STDIN (сервер получает команду QUIT), но ничего не происходит, пока вы не нажмете какую-либо клавишу.
Эта проблема не существует в версии Cygwin для OpenSSL. К сожалению, базовая установка Cygwin занимает около 100 МБ дискового пространства, но вы можете попробовать извлечь только openssl.exe и необходимые библиотеки.
Этот метод работает:
echo QUIT | c:\cygwin\bin\openssl.exe s_client -showcerts -connect google.com:443 > cert.txt
Ответ 2
Если вы работаете под управлением mingw64 в окнах, вы можете использовать программу winpty для правильной упаковки терминала
Например, создание псевдонима в bash
alias openssl = 'winpty openssl.exe'
Тогда
openssl s_client -connect blah
Должен работать как ожидалось
Ответ 3
В окнах просто введите winpty
, прежде чем команда openssl сделает трюк. Так, например, вы можете создать такой сертификат:
winpty openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX
Ответ 4
По причинам, которые я не понимаю, эхо QUIT или quit\n во входные данные не работают в моем случае. Я использую MINGW64 с OpenSSL 1.0.2d в Windows 8.1, и я использую openssl для получения сертификатов с серверов внутри bash script. Тем не менее, просто запустив команду openssl в фоновом режиме и ожидая немного сработало для меня:
#!/bin/bash
openssl s_client -connect my.server.com:443 -showcerts > output.txt 2>/dev/null &
sleep 2