Wxcaféfile:///home/wxcafe/code/blog-source/output/2014-05-30T08:25:00+02:00SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:,2014-05-30:home/wxcafe/code/blog-source/output/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour <code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat différent pour chaque sous-domaine.</p> <p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque changement de sous-domaine conduit a un message d'erreur, etc) et pas plus sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est self-signed, il me semble préférable que l'arrivée sur le site ne commence pas par une page firefox disant "Something's Wrong!", et ces redirections ne seront donc pas mises en place.</p> <p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les communications avec ce serveur soient future-proof, c'est a dire que, même si quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons l'implémentation : <br /> Pour générer la clé, tout d'abord, il convient d'utiliser les commandes suivantes: </p> <div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> <span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> <span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> <span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> <span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. Une fois la clé générée, il faut dire aux différents services de l'utiliser, et de n'utiliser que des ciphers PFS. La méthode dépend donc du service. Je vais lister ici les methodes pour quelques services que j'utilise :</p> <h3>apache :</h3> <div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> <span class="cp"># [...]</span> <span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> <span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> <span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> <span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> <span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> <span class="cp"># [...]</span> <span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> <span class="cp"># [...]</span> <span class="n">SSLEngine</span> <span class="n">on</span> <span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> <span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> <span class="cp"># [...]</span> </pre></div> <h3>nginx :</h3> <div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> <span class="cp"># [...]</span> <span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> <span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> <span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> <span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> <span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> <span class="cp"># [...]</span> <span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> <span class="cp"># [...]</span> <span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> <span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> <span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> <span class="cp"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> <div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> <span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> <span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> <span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> <span class="p">}</span> <span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> </pre></div> <h3>postfix (email) :</h3> <div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> <span class="cp"># [...]</span> <span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> <span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> <span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> <span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> <span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> <span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> <span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> <span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> <span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> <span class="cp"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> <div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> <span class="cp"># [...]</span> <span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> <span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> <span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> </pre></div> <p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> <p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son implémentation d'une technologie "remplaçant" le système de CAs qui existe actuellement.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:,2013-06-12:home/wxcafe/code/blog-source/output/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> <p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de site statique en python, du fait de son efficacité, de sa facilité d'utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" constitué de templates pour les fichiers html et l'organisation du projet et d'une partie "statique" contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> <div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> <span class="err">├──</span> <span class="k">static</span> <span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> <span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> <span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> <span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> <span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> <span class="err">└──</span> <span class="n">template</span> <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> <span class="err">├─</span> <span class="p">[...]</span> <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> </pre></div> <p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> <p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les fichiers n'existant pas la dernière fois, etc... La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi qui ait modifié les templates et le css), c'est lisible (puisque c'est du python, par opposition au PHP...), et c'est plus "efficace". Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu que toutes les pages passent par les mêmes templates, c'est assez facile a faire.</p> </li> <li> <p>Perte du spam: Pourquoi c'est dans les points négatifs, ca?</p> </li> <li> <p>Temps d'adaptation et d'appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins réguliers sur le blog, c'est parce que j'apprend a me servir de ce système et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> <p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Update2013-01-05T18:32:00+01:00Wxcafetag:,2013-01-05:home/wxcafe/code/blog-source/output/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt sur le blog!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:,2012-09-18:home/wxcafe/code/blog-source/output/posts/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> <ul> <li> <p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez compliqué de trouver des sujets intéressants liés a l'informatique, et qui méritent un article. Je vous invite d'ailleurs a me suggérer des sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> </li> <li> <p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire les recherches nécessaires, tout en manageant mes cours et mon temps libre.</p> </li> </ul> <p>A cause de cela, j'ai pris la décision de changer le rythme de parution des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> <p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez étonnant de voir ca...), et je précise que je vais ajouter une page About Me, qui bien entendu rassemblera des informations sur moi, ma vie, mon oeuvre :P</p> <p>Ceci dit, je vais bosser un peu sur le prochain article.</p> <p>A plus tard!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:,2012-08-18:home/wxcafe/code/blog-source/output/posts/debuts-presentation-etc/<p>Bonjour!</p> <p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur Twitter, mais aussi sur IRC (Je traîne pas mal sur irc.freenode.net/##nolife et #debian-fr)</p> <p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je fais partie de ce genre de personne qui sont capables d'investir tout leur temps et leur énergie a s’intéresser a un sujet en particulier, et qui ne peuvent pas vivre sans leurs passions, avec une petite différence cependant, qui est que je m’intéresse a plusieurs choses : l'informatique, qui est un champ tellement large qu'on peut passer une vie a apprendre des choses dessus, et plus particulièrement à l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres {bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les trolls seront a partir de maintenant indiqués avec le tag [tr]] du libre, je préfère utiliser de l'open-source si c'est possible}, programmation en C, python et java, etc...) , mais aussi a l’électronique. </p> <p>Dans un tout autre registre, je m’intéresse aussi beaucoup aux différents aspects du féminisme et des égalités sexuelles (anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , et a la culture dite "geek" en général.</p> <p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros problèmes en terme de régularité de post, donc ne vous inquiétez pas si vous ne voyez rien pendant deux semaines.</p> <p>Merci beaucoup de votre attention, et a bientôt!</p>