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
Où 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 :(
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
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
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
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