Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<p>J’ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé,
passons rapidement sur ce qui y est lié : ne souhaitant pas “profiter” du
paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis
tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais
brancher sur ma télévision un système me permettant de regarder ces films et
séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix,
etc…) simplement.</p>
<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j’ai
décidé d’installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça
donnait. Le résultat n’étant pas satisfaisant (a cause des difficultés du RPi
a faire fonctionner tout ça), j’ai décidé d’upgrader le système.</p>
<p>J’ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a>
(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un
<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je
pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un
debian, avec en plus Steam pour faire du streaming depuis mon desktop. L’autre
avantage de tourner sur du Intel, c’est de pouvoir mater Netflix (puisque le
plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que
sur x86).</p>
<p>J’ai donc reçu après un certain temps le matériel sus cité, que j’ai avidement
monté, avant de me rendre compte que le manuel de l’adaptateur Pulse-Eight était
[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J’ai donc
cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce
post</a>
expliquant comment brancher l’adaptateur. Je vais donc résumer ici le processus,
ce qui devrait rendre la tache a la fois plus simple pour les autres personnes
cherchant l’information, et pour moi si je dois remonter ce système.</p>
<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit
“Front Panel”, et un appelé “Custom Solution Header”. Les trois sont utilisés
ici. La première chose a faire est de brancher les fiches grises et rouges sur
le Custom Solution Header: le branchement doit être fait ainsi :</p>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution
┌─┬─┬─┬─┬─┐
│g│ │·│r│·│
├─┼─┼─┼─┼─┤
│·│·│·│·│·│
└─┴─┴─┴─┴─┘
g ➔ fiche grise
r ➔ fiche rouge
· ➔ pin inutilisé
➔ espace vide (sans pin)
</pre></div>
<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c’est plus
facile, puisqu’il n’y a qu’une seule fiche a brancher ici : la orange.</p>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel
┌─┬─┬─┬─┬─┐
│·│·│·│·│·│
├─┼─┼─┼─┼─┤
│ │·│o│·│·│
└─┴─┴─┴─┴─┘
o ➔ fiche orange
· ➔ pin inutilisé
➔ espace vide (sans pin)
</pre></div>
<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB.
Étant donné que ce header contient deux fois les pins nécessaires a un
branchement USB, il est possible de brancher les cables de plusieurs façons. </p>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB
┌─┬─┬─┬─┬─┐
│b│B│v│n│·│
├─┼─┼─┼─┼─┤
│·│·│·│·│ │
└─┴─┴─┴─┴─┘
b ➔ fiche bleue
B ➔ fiche Blanche
v ➔ fiche verte
n ➔ fiche noire
· ➔ pin inutilisé
➔ espace vide (sans pin)
</pre></div>
<p>Tous les branchements étant effectués, il faut maintenant remonter la bête
(attention a ne pas déranger les branchements avec les antennes Wifi, par
exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer
un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut
que “Deep S4/S5” soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de
démarrer et le NUC.</p>
<p>Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!</p>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement
récent, par rapport a l’histoire d’Internet. Sa mise en place pose
problème : les protocoles existants ne s’accommodent qu’assez mal de recevoir
soudainement un flot de données chiffrées, mais développer de nouveaux
protocoles est complexe et n’apporte rien d’intéressant. Pour palier a ce
problème, deux solutions sont apparues.</p>
<p>Le première consiste à faire écouter les services sur un
autre port, dans un tunnel SSL. De cette façon, le service existant écoute
normalement, mais il ne répond pas directement aux requêtes. A la place, un
tunnel SSL est mis en place, et les requêtes et les réponses passent dans le
tunnel (ou elles apparaissent donc chiffrées pour l’extérieur). Cela permet de
proposer un service chiffré en modifiant de façon minimale le programme, au prix
de devoir aussi changer tous les clients, et de devoir les orienter sur un autre
port.</p>
<p>L’autre approche qui a été utilisée est une approche d’<em>upgrade</em>. La
communication commence en mode non chiffré, puis le client demande l’upgrade de
la connexion vers le mode chiffré s’il le supporte, les deux machines
machines font un <em>handshake</em> SSL et la communication continue a travers le
tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls
les clients capables de passer en SSL le feront, ce qui permet de faire la “mise
a jour” en douceur.</p>
<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un
service – laisser un port pour le SSL et un pour le trafic non chiffré, ou bien
un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br />
La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout
d’abord, il permet de n’utiliser qu’un seul port : ça permet de simplifier la
configuration du firewall. En plus de ça, il permet aux clients “anciens” (ceux
qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se
connecter, même si cela signifie que leurs informations seront transmises en
clair. Surtout, il permet d’éviter aux utilisateurs d’avoir a configurer leurs
clients. Si le client supporte le chiffrement, il l’activera de lui même s’il
voit qu’il est disponible.<br />
Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C’est mieux pour la sécurité
de tout le monde.</p>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si
ce n’est pas le cas, voila les bases : Docker est un système de containers. Les
containers sont une forme particulière de virtualisation, ou le kernel n’est pas
virtualisé, mais ou les processus du système hôte sont séparés de ceux des
systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>,
mais n’est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>,
qui permettent justement de séparer des groupes de processus. Le principe de
Docker est donc d’avoir une machine hôte sur laquelle s’exécutent plusieurs
conteneurs Dockers, chacun séparé des autres et de l’hôte, mais utilisant tous
le même kernel. Cela pose quelques questions en terme de sécurités, puisque la
séparation est bien plus fine qu’avec de la virtualisation classique. En effet,
ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la
capacité de remonter jusqu’à l’hôte, puisqu’il n’est pas vraiment séparé des
invités. </p>
<p>Quoi qu’il en soit, Docker permet donc de virtualiser a moindre coût des
systèmes GNU/Linux. “Mais pourquoi utiliser Docker, dans ce cas”, vous
demandez-vous peut être, “puisque Xen peut faire la même chose, et plus
(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?”. Et bien
c’est très simple : Docker apporte la simplicité de déploiement d’applications.
Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui
permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une
commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer
rapidement et facilement un grand nombre d’images déjà configurées. </p>
<p>Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
rapport avec les ebooks et Twitter.</p>
<p>Les comptes dits “ebooks” (le nom vient a l’origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>,
voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots
twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>,
avec les tweets d’un utilisateur “source” comme corpus, pour produire des tweets
ressemblant a ceux de l’utilisateur source. Nous allons voir maintenant comment
en installer un.</p>
<p>C’est, comme disent certaines personnes, “fun”.</p>
<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots,
cependant dans ce cas nous nous concentrerons sur
<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée
par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l’API
twitter et la génération des messages.</p>
<p>Cependant, cela n’explique toujours pas le lien avec Docker. Ce lien est très
simple : nous utilisons un container pour faire tourner les bots. Depuis la
version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une
seule instance. Cependant, il est toujours plus sûr d’isoler les bots, et les
containers dockers permettent de les déployer sur n’importe quelle machine
(celleux qui ont déjà tenté de mettre en place une application basée sur ruby
sauront le problème que cela pose habituellement). Pour ce faire, j’ai créé <a href="https://github.com/wxcafe/ebooks_example">un
repo github</a> qui contient toutes les
pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
Dockerfiles, etc.</p>
<p>Le fonctionnement du bot est
simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
l’utilisateur source avec <code>ebooks archive <username> <filename></code> (c’est du json)
, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks
consume <filename></code>. Cela fait, démarrer le bot revient a lancer le container :
<code>docker run -d <container name></code> Pour plus d’informations, allez voir <a href="https://docs.docker.com/articles/basics/">la
documentation Docker</a></p>
<p>Bien entendu, dans l’idéal il faudrait mettre a jour les corpus de chaque
utilisateur régulièrement. Cela est très simple a mettre en place avec un simple
script cron : </p>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json >> /var/log/ebooks/update.log 2>&1
00 05 * * * cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1
00 10 * * * docker rm -f bots >/dev/null 2>&1
00 15 * * * docker rmi bots > /dev/null 2>&1
00 20 * * * cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1
00 25 * * * docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1
</pre></div>
<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux
commandes ne s’executent en même temps.</p>
<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby
toute sale, et votre système hôte reste propre. Bien sûr, ce n’est qu’un exemple
des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des
applications “usuelles”
dedans</a>,
puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
existent.</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30: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="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
sudo openssl req -new -key example.key -out example.csr
# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
</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="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
<span style="color: #75715e"># [...]</span>
<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
<span style="color: #75715e"># [...]</span>
<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
<span style="color: #75715e"># [...]</span>
<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
<span style="color: #75715e"># [...]</span>
</pre></div>
<h3>nginx :</h3>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
<span style="color: #75715e"># [...]</span>
<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
<span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
<span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
<span style="color: #75715e"># [...]</span>
<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
<span style="color: #75715e"># [...]</span>
<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
<span style="color: #75715e"># [...]</span>
</pre></div>
<h3>prosody (jabber) :</h3>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
<span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
<span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
<span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
<span style="color: #f8f8f2">}</span>
<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
</pre></div>
<h3>postfix (email) :</h3>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
<span style="color: #75715e"># [...]</span>
<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
<span style="color: #75715e"># [...]</span>
</pre></div>
<h3>dovecot (imap) :</h3>
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
<span style="color: #75715e"># [...]</span>
<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
</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:wxcafe.net,2013-06-12: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="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
<span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
<span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
<span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
<span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
<span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.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:wxcafe.net,2013-01-05: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>