web-dev-qa-db-fra.com

openssl se bloque et ne se ferme pas

J'essaie d'utiliser openssl pour obtenir un certificat, et il semble continuer de se bloquer. J'ai fait beaucoup de recherches mais toutes les options disponibles ne semblent pas fonctionner sur Windows.

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

J'ai essayé ceci:

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

quit.txt contient "quitter\n" de http://bytes.com/topic/php/answers/8802-automate-openssl-s_client-command-batch-php-script

Cela n'a pas fonctionné. J'ai également regardé Openssl s_clinet -connect scripting. Forcer à quitter l'aide

J'ai aussi essayé -prexit

J'ai également étudié cela et je ne peux pas le faire fonctionner: https://serverfault.com/questions/139728/how-to-download-ssl-certificate-from-a-website

J'allais si bien! J'ai réussi à faire quelque chose que je pensais impossible et une chose simple comme ce bug a réussi à m'arrêter pour le moment :(

41
Adiboy

Il semble que certaines distributions OpenSSL pour Windows attendent une pression de touche supplémentaire, indépendante de l'entrée standard. Quit.txt est correctement canalisé dans STDIN d'OpenSL (le serveur reçoit la commande QUIT), mais rien ne se produit tant que vous n'appuyez sur aucune touche.

Ce problème n'existe pas dans la version de Cygwin d'OpenSSL. Malheureusement, l'installation de base de Cygwin prend environ 100 Mo d'espace disque, mais vous pouvez essayer d'extraire uniquement openssl.exe et les bibliothèques requises.

Cette méthode fonctionne:

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

Sous Windows, il suffit de taper winpty avant que votre commande openssl fasse l'affaire. Ainsi, par exemple, vous pouvez créer un certificat comme ceci:

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

78
Glenn Werner

Si vous exécutez sous mingw64 sur Windows, vous pouvez utiliser le programme winpty pour envelopper correctement le terminal

Par exemple, créer un alias sous l'alias bash openssl = 'winpty openssl.exe'

Ensuite, openssl s_client -connect blah

Devrait fonctionner comme prévu

8
crafty

Pour des raisons que je ne comprends pas complètement, l'écho de QUIT ou quit\n dans l'entrée n'a pas fonctionné dans mon cas. J'utilise MINGW64 avec OpenSSL 1.0.2d sur Windows 8.1, et j'utilise openssl pour obtenir des certificats des serveurs à l'intérieur d'un script bash. Cependant, simplement exécuter la commande openssl en arrière-plan et attendre un peu a fonctionné pour moi:

#!/bin/bash

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