diff options
Diffstat (limited to 'content/Informatique')
-rw-r--r-- | content/Informatique/chiffrage.rst | 2 | ||||
-rw-r--r-- | content/Informatique/ssl_proxy.rst | 128 |
2 files changed, 129 insertions, 1 deletions
diff --git a/content/Informatique/chiffrage.rst b/content/Informatique/chiffrage.rst index fcda1dd..1ee5866 100644 --- a/content/Informatique/chiffrage.rst +++ b/content/Informatique/chiffrage.rst @@ -5,7 +5,7 @@ Mettre en place une solution de chiffrage avec authentification forte ##################################################################### :date: 2008/11/07 -:tags: Libre +:tags: Libre, ViePrivée :summary: |summary| .. |summary| replace:: diff --git a/content/Informatique/ssl_proxy.rst b/content/Informatique/ssl_proxy.rst new file mode 100644 index 0000000..c57f27e --- /dev/null +++ b/content/Informatique/ssl_proxy.rst @@ -0,0 +1,128 @@ +.. -*- 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 ! |