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