From b9e22325bb46e2611a73e54a3f0ade31800d1bd9 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Fri, 9 May 2014 14:30:46 +0200 Subject: Moved to pelican 3.3 --- content/Informatique/ssl_proxy.rst | 128 ------------------------------------- 1 file changed, 128 deletions(-) delete mode 100644 content/Informatique/ssl_proxy.rst (limited to 'content/Informatique/ssl_proxy.rst') diff --git a/content/Informatique/ssl_proxy.rst b/content/Informatique/ssl_proxy.rst deleted file mode 100644 index c57f27e..0000000 --- a/content/Informatique/ssl_proxy.rst +++ /dev/null @@ -1,128 +0,0 @@ -.. -*- mode: rst -*- -.. -*- coding: utf-8 -*- - -======================================== -Vérifier un certificat SSL en entreprise -======================================== - -:date: 2013-12-19 -:tags: ViePrivée -:summary: |summary| -:logo: static/images/chiffer/pgp_75.jpg - - -.. figure:: |filename|/images/chiffer/pgp_150.jpg - :figwidth: 150 - :figclass: floatright - :alt: Pavement - - Image : `Elsamuko`_ (creativecommons_) - -.. _Elsamuko: http://www.flickr.com/photos/28653536@N07/10595809575/ -.. _creativecommons: http://creativecommons.org/licenses/by-sa/2.0/deed.fr - -|summary| - -.. |summary| replace:: - openssl permet de vérifier un certificat SSL en ligne de commande. Ceci est - très utile si l'on souhaite vérifier son installation et s'assurer que le - certificat fourni est bien le bon. Toutefois, l'application ne fonctionne - pas si un proxy est nécessaire pour se connecter au site distant. - -C'est bien dommage, car en entreprise, le proxy est souvent obligatoire. Si -l'on souhaite s'assurer que le proxy ne va pas nous présenter un mauvais -certificat, il est nécessaire de passer par le navigateur web pour vérifier -l'authenticité du certificat, mais il n'est alors pas possible d'automatiser la -procédure. - -Pour mener à bien notre action, il va falloir ruser, et jouer avec les -connexions réseau, mais avant tout ça, reprenons un peu les bases, et voyons -comment récupérer un certificat ssl en ligne de commande. - -openssl -======= - -Openssl est une librairie utilisée pour la sécurité et le chiffrement, elle -permet de générer des certificats clients et serveur, de chiffrer selon -différents algorithmes, etc. - -Une application en ligne de commande existe, et permet de contrôler un -certificat de la manière suivante : - -.. code-block:: console - - $ echo -n | openssl s_client -connect site.test:443 | openssl x509 -noout -md5 -fingerprint - -Toutefois, il faut que le site soit accessible directement, sans proxy. Si -c'est le cas, il n'est plus possible de vérifier le certificat en question. - -C'est problématique si l'on souhaite justement s'assurer que le proxy ne fait -pas du mitm_. Pour vérifier le certificat dans ces conditions, il va falloir -nous faire entrer un autre outil qui va se charger de passer le proxy. - -.. _mitm: http://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu - -Vous avez remarqué que l'on précise le serveur et le port sur lequel est -installé le certificat à vérifier. Il est donc possible de tester un certificat -sur `localhost:1234` si on le souhaite (à la condition d'avoir un serveur https -qui réponde sur ce port). - -socat -===== - -C'est là qu'intervient socat. Socat_ est un outil similaire à netcat (le -couteau suisse du web), sauf que socat à la possibilité de gérer les requêtes -bidirectionnelles. Nous allons nous en servir pour ouvrir une connexion à -travers le proxy sur le site que nous souhaitons tester. - -.. _socat: http://www.dest-unreach.org/socat/ - -En laissant la connexion ouverte, on permet à openssl de s'y connecter et -effectuer ses tests. C'est donc grâce aux deux outils que l'on va pouvoir faire -notre contrôle. - -On se crée la connexion avec la commande suivante : - -.. code-block:: console - - $ socat TCP4-LISTEN:2022 "PROXY:site.test:443 | TCP:proxy.test:8080" - -La connexion n'est pas persistante, elle sera fermée dès sa première -utilisation, cela permet de chaîner les deux commandes directement : - -.. code-block:: bash - - #!/bin/sh - - if [[ ! -z $https_proxy ]]; then - proxy=`echo ${https_proxy} | sed -e 's|http://||' -` - socat TCP4-LISTEN:2022 "PROXY:$1 | TCP:${proxy}" & - echo -n | openssl s_client -connect localhost:2022 | openssl x509 -noout -md5 -fingerprint - else - echo -n | openssl s_client -connect $1 | openssl x509 -noout -md5 -fingerprint - fi - -enregistrez ce script sous `check_ssl.sh` puis lancez cette commande ainsi : - -.. code-block:: console - - $ check.sh site.test:443 - depth=0 C = FR, ST = Some-State, O = Internet Widgits Pty Ltd, CN = site.test, emailAddress = contact@site.test - verify error:num=20:unable to get local issuer certificate - verify return:1 - depth=0 C = FR, ST = Some-State, O = Internet Widgits Pty Ltd, CN = site.test, emailAddress = contact@site.test - verify error:num=21:unable to verify the first certificate - verify return:1 - DONE - MD5 Fingerprint=73:4F:77:1D:2B:C1:4F:0E:3F:42:FA:14:A9:0F:BC:80 - -Si la variable d'environnement `HTTPS_PROXY` est renseignée le script -créera le tunnel via socat, sinon, openssl sera utilisé directement pour -vérifier le certificat. - -Vous pouvez le comparer avec ce que vous affiche le navigateur pour vous -assurer qu'il est cohérent : - -.. image:: |filename|/images/chiffer/certificat.jpg - -N'oubliez pas, on n'est jamais trop prudent ! -- cgit v1.2.3