1

Récupération d'articles d'archives

This commit is contained in:
2026-03-29 03:00:47 +02:00
parent 060119c91c
commit ecc25fe7cf
592 changed files with 17498 additions and 8153 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@@ -0,0 +1,226 @@
---
comments_url: https://com.richard-dern.fr/post/544
date: '2016-01-31 17:51:50'
links:
- lang: fr
name: Page d'origine sur LinuxFr
url: https://linuxfr.org/users/richarddern/journaux/a-propos-des-certificats
tags:
- Certificat
- Sécurité
- Let's Encrypt
- Firefox
title: À propos des certificats
weather:
humidity: 97
illuminance: 0.0
precipitations: true
pressure: 1011.8
source:
- open-meteo
temperature: 8.4
wind_direction: 247
wind_speed: 25.0
---
_Un autre article publié initialement sur mon site, sur un sujet qui me tient particulièrement à cœur, et pour lequel j'espère avoir des avis._
> Les certificats font régulièrement la une de l'actualité informatique ces derniers temps.
> Ces petits fichiers ne contenant que du texte et valant leur poids (en kilo-octets) en dollars, sont censés être les garants de notre sécurité sur Internet.
> Mais en simplifiant leur mise en oeuvre nous avons ouvert une brèche.
> Une brèche dans un élément crucial de la chaîne de sécurité.
## Qu'est-ce qu'un certificat ?
Un certificat est un "simple" fichier texte.
La suite de caractères qu'il contient sert à chiffrer des données.
Pour le commun des mortels, cela signifie simplement que le numéro de carte bancaire qu'ils transmettent à un site tiers se fait de façon sécurisée, sans bien sûr comprendre tout ce que cela implique sur le plan technique.
Dans la pratique, un certificat doit être signé, validé, par une autorité de certification.
Il en existe un certain nombre, et il s'agit simplement d'un organisme habilité à émettre un certificat racine.
Ce certificat racine est généralement présent au sein du système d'exploitation ou du navigateur web, dès son installation.
C'est la partie publique d'une chaîne de chiffrement, dont la clé privée est - normalement - jalousement gardée par l'autorité de certification.
Le but de ce certificat racine est notamment de s'assurer que les sites Internet que l'on visite sont effectivement sécurisés, et que la chaîne de confidentialité ne soit pas brisée, c'est-à-dire, que personne ne se soit intercalé entre le site en question et le visiteur.
## Je ne vois pas le problème
Il n'y a pas eu de raison de douter de ce fonctionnement, jusqu'à ce qu'on trouve un [certificat racine vérolé](http://www.nextinpact.com/news/93126-un-adware-livre-avec-machines-lenovo-pose-serieux-risque-securite.htm).
Ce n'était qu'une question de temps de toute façon.
D'après la [Wikipédia](https://fr.wikipedia.org/wiki/Certificat_%C3%A9lectronique#Vuln.C3.A9rabilit.C3.A9s):
> Le système de certificats ne présente pas de vulnérabilité technique théorique sous réserve que toutes ses étapes soient correctement implémentées.
"*[..]sous réserve que[..]*".
C'est toujours inquiétant de lire ça.
Surtout quand on parle de certificats racines.
Concrètement, les certificats racines et les autorités de certification posent plusieurs problèmes, selon moi.
### Les coûts prohibitifs
Un certificat coûte au minimum une centaine d'euros.
Quelques exemples de premiers prix:
- 349 euros chez [Symantec](https://web.archive.org/web/20160311074126/http://www.symantec.com/fr/fr/ssl-certificates/)
- 179 euros chez [GlobalSign](https://web.archive.org/web/20160513072057/https://www.globalsign.fr/fr/ssl/domain-ssl/)
- 99 euros chez [Thawte](https://web.archive.org/web/20150419063308/https://www.thawte.fr/ssl/index.html)
Ces prix sont **par an**.
Pour un fichier texte qu'on peut générer à la maison.
### L'insouciance
C'est aussi à force d'œuvrer à la simplification de l'informatique qu'on scie la branche sur laquelle on est assis.
Ce qui pousse les éditeurs de sites Internet à acheter un certificat, c'est **l'insouciance induite chez les visiteurs**.
Avant d'arriver sur ce blog, vous avez fait face à une fenêtre vous informant de l'invalidité de mon certificat.
En réalité, mon certificat est tout à fait valide.
Il n'est juste pas signé par une autorité de certification racine, dont les certificats racines sont dans votre navigateur.
Pour un visiteur non technicien, cette page fait peur.
Ce n'est évidemment pas vendeur.
Du coup, les éditeurs se tournent vers des autorités de certification pour que la visite de leur site ne soit pas entachée de cet avertissement.
### Le fameux avertissement
![La fenêtre d'avertissement de iceweasel/firefox](images/avertissement-ssl.jpeg "Source : https://www.athaliasoft.com/images/post/1cecd6eec207ca658b785f4ba5497a91/avertissement-ssl.jpeg")
Lors d'une session sécurisée, le serveur réclame un certificat que le navigateur est censé trouver dans sa "base de certificats".
S'il n'en dispose pas, il demande à l'utilisateur s'il veut réellement accepter le certificat émis pas le serveur.
Sauf s'il est signé par une autorité de certification qui dispose d'un certificat racine inclus dans le navigateur ou le système d'exploitation.
L'autre cas où le navigateur demande à l'utilisateur s'il veut réellement accepter le certificat, c'est lorsque le certificat attendu diffère de celui déjà dans la base de certificats du client.
Le problème, c'est qu'un certificat peut tout à fait être légitime, sans pour autant être signé par une autorité de certification racine.
Dès lors, le ton pris par le navigateur pour avertir l'utilisateur que le certificat du serveur est invalide est légèrement hautain, voire dédaigneux, semble-t'il à la botte des autorités de certification racines et de leurs dollars bien mal acquis.
## Quoi faire ?
Je tourne sous [Debian](http://www.debian.org/).
Les certificats racines sont installés par le paquet [*ca-certificates*](https://packages.debian.org/jessie/ca-certificates).
Il est impossible de le supprimer car bon nombre d'autres paquets dépendent de lui, chose que j'ai peine à expliquer.
```
# apt-cache showpkg ca-certificates
Package: ca-certificates
[...]
Reverse Depends:
wordpress,ca-certificates
openssl,ca-certificates
0install-core,ca-certificates
wordpress,ca-certificates
wget,ca-certificates
w3m,ca-certificates
ubuntu-dev-tools,ca-certificates
python-txaws,ca-certificates
sympa,ca-certificates
sylpheed,ca-certificates
ssh-import-id,ca-certificates
software-properties-common,ca-certificates
sendmail-base,ca-certificates
rubygems-integration,ca-certificates
ruby-webmock,ca-certificates
ruby-excon,ca-certificates
python3-requests,ca-certificates
python-requests-whl,ca-certificates
python-requests,ca-certificates
libqt4-network,ca-certificates
libqca2,ca-certificates
python3-urllib3,ca-certificates
python-urllib3-whl,ca-certificates
python-urllib3,ca-certificates
python3-tornado,ca-certificates
python-tornado,ca-certificates
python3-pip,ca-certificates
python-pip,ca-certificates
python3-httplib2,ca-certificates
python-httplib2,ca-certificates
libpurple0,ca-certificates
php-guzzlehttp-ringphp,ca-certificates
php-guzzle,ca-certificates
osc,ca-certificates
openssl,ca-certificates
libopenconnect3,ca-certificates
nodejs-dev,ca-certificates
libneon27-gnutls,ca-certificates
mutt,ca-certificates
msmtp,ca-certificates
mew-beta-bin,ca-certificates
mew-bin,ca-certificates
mercurial-common,ca-certificates
libwww-perl,ca-certificates
liblwpx-paranoidagent-perl,ca-certificates
liblwp-protocol-https-perl,ca-certificates
libio-socket-ssl-perl,ca-certificates
libhttp-tiny-perl,ca-certificates
libgwenhywfar-data,ca-certificates
lava-dev,ca-certificates
kdelibs5-data,ca-certificates
igtf-policy-unaccredited,ca-certificates
igtf-policy-slcs,ca-certificates
igtf-policy-mics,ca-certificates
igtf-policy-iota,ca-certificates
igtf-policy-experimental,ca-certificates
igtf-policy-classic,ca-certificates
php-google-api-php-client,ca-certificates
gnustep-base-common,ca-certificates
glib-networking-tests,ca-certificates
gajim,ca-certificates
freeradius,ca-certificates
fetchmail,ca-certificates
esniper,ca-certificates
epiphany-browser,ca-certificates
libcurl3-nss,ca-certificates
libcurl3-gnutls,ca-certificates
libcurl3,ca-certificates
ca-certificates-java,ca-certificates 20121114
python-bzrlib,ca-certificates
boinc-client,ca-certificates
balsa,ca-certificates
aria2,ca-certificates
```
Mais c'est l'idée: j'aimerais supprimer tous les certificats racines de ma machine (on peut les supprimer un à un du navigateur ceci-dit).
Vous l'aurez compris: cela impliquerait que la première visite sur chaque site sécurisé que je fréquente soit précédée du message d'avertissement sus-cité.
Un certificat à vérifier et à valider une fois pour toutes - normalement - et par site.
Je pense sincèrement qu'il s'agit là de la solution la plus raisonnable: forcer l'utilisateur à vérifier la chaîne de sécurité lors de sa première connexion à un site sécurisé.
Ça prend quelques secondes, et peut éviter de grands problèmes.
Par ailleurs, cette page d'avertissement devrait être nettement moins agressive.
Par exemple, parler de certificat *inconnu* lors de la première visite, plutôt que de certificat invalide, et opter pour une mise en page évoquant l'*information* plutôt que l'avertissement.
Et parler de changement de certificat lorsqu'on visite un site dont le certificat ne correspond plus à celui déjà accepté auparavant, en optant cette fois pour la mise en page traditionnelle, afin d'avertir l'utilisateur que, cette fois, il y a danger.
Peut-être même afficher directement le certificat au lieu de devoir l'afficher dans une boîte de dialogue.
En tout cas, je recommande plus que chaudement de [générer soi-même ses propres certificats](https://duckduckgo.com/?q=cr%C3%A9er+sa+propre+autorit%C3%A9+de+certification&kaj=m&k5=1&km=m&kac=-1&k1=-1&kw=s&kx=5a8952&kai=1&kz=-1&kal=-1&kp=-1&kak=-1&kk=-1&kd=1&kad=fr_FR&t=ffsb), avec sa propre autorité de certification, et déployer ses propres certificats "racines" dans les navigateurs qu'on utilise.
C'est probablement coûteux en temps et en argent en entreprise, et présente sûrement peu d'intérêt pour un petit réseau à la maison (encore que...), mais qu'en serait-il du prix d'un dérapage incontrôlé ?
## Le cas de Let's Encrypt
En ce qui concerne le prix des certificats, il y a des solutions alternatives, et notamment [Let's Encrypt](https://letsencrypt.org/) qui déchaîne les passions.
Sur le papier, c'est alléchant puisque Let's Encrypt permet de se procurer gratuitement des certificats signés par une autorité de certification racine.
Donc pas de message d'avertissement dans le navigateur, et un cadenas vert pour rassurer l'utilisateur.
### Pourquoi ce n'est pas aussi bien que ce qu'on croit
En ce qui me concerne, je vais passer pour un paranoïaque comme d'habitude, mais j'ai tendance à ne pas faire confiance à un tiers, au moins pour ce genre de choses.
D'autant qu'on peut parfaitement faire ses propres certificats à la maison, tout aussi gratuitement.
Ma crainte me parait justifiée, en particulier quand on voit les sponsors de Let's Encrypt.
Personnellement, j'ai du mal à admettre que l'[EFF](https://www.eff.org/) puisse être sponsor des mêmes initiatives que facebook (est-il nécessaire de préciser pourquoi ?)
ou Cisco (connue pour ses backdoors dans ses routeurs).
Et voir ces entreprises s'immiscer dans [un projet de la Linux Foundation](http://collabprojects.linuxfoundation.org/) me laisse tout aussi perplexe, mais c'est un autre débat.
## Au final...
Au final, je ne vois qu'un changement de philosophie vis-à-vis des certificats racines pour améliorer les choses.
Je considère désormais chaque certificat racine comme une potentielle backdoor, permettant de faire tout et surtout n'importe quoi, sans le moindre contrôle de l'utilisateur.
On place notre confiance dans des entreprises financées notamment par ces certificats.
C'est contraire aux principes d'un Internet ouvert et décentralisé.
Contraire même au principe de sécurité le plus élémentaire: ne jamais céder cette dernière à un tiers.
Enfin, c'est une preuve de notre oisiveté qui tend à privilégier le confort à la sécurité.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -0,0 +1,100 @@
---
comments_url: https://com.richard-dern.fr/post/543
date: '2016-01-31 17:34:57'
links:
- lang: fr
name: Page d'origine sur LinuxFr
url: https://linuxfr.org/users/richarddern/journaux/test-du-framework-front-end-semantic-ui
tags:
- Frontend
- Développement
- Web
- Semantic
- UI
- HTML
title: Test du framework front-end Semantic UI
weather:
humidity: 97
illuminance: 0.0
precipitations: true
pressure: 1011.8
source:
- open-meteo
temperature: 8.4
wind_direction: 247
wind_speed: 25.0
---
_Suite à une discussion récente [ici-même](https://linuxfr.org/forums/general-hors-sujets/posts/les-geeks-et-les-reseaux-sociaux), j'ai décidé de tenter le coup et de vous proposer un article initialement [publié sur mon site](https://www.athaliasoft.com/test-du-framework-front-end-semantic-ui).
J'accueille avec grand plaisir vos remarques afin d'améliorer ce journal et les suivants._
> Dans le domaine des frameworks front-end, il n'y a pas que Bootstrap.
> Il y a aussi Semantic UI, qui, comme son nom l'indique, cherche à se différencier par sa syntaxe moins programmatique, plus naturelle.
> Malgré une version 2.1 très réussie, il reste toutefois quelques écueils.
Parmi les frameworks front-end, on connait surtout [Bootstrap](http://getbootstrap.com/) (notamment parce que ce sont les gars de chez twitter/github qui l'ont fait, le framework bénéficie donc d'une bonne image de marque).
Il y en a [bien d'autres](https://usablica.github.io/front-end-frameworks/compare.html), et j'ai décidé de jeter mon dévolu sur [Semantic UI](http://semantic-ui.com/) pour une raison toute personnelle: l'esthétique des contrôle me plaît mieux qu'un autre grand framework: [Foundation](http://foundation.zurb.com/).
![Semantic UI](images/semantic-ui-buttons.jpeg "Source : https://www.athaliasoft.com/images/post/d7bf8d87e9ae66f28ed6197b8fece94f/semantic-ui-buttons.jpeg")
Le parti pris par Semantic UI m'a quelque destabilisé.
En effet, les noms des classes CSS ont une cohérence linguistique.
Par exemple, une image floatée à droite se verra attribuer les classes ```ui floated right image```.
Quand j'ai commencé à développer avec Bootstrap, ce qui m'a le plus contrarié est de devoir garder la documentation à portée de main: impossible de me rappeler de toutes les possibilités et leur syntaxe.
Finalement, j'ai accepté que c'était indispensable.
J'ai eu le même cas en développant en back-end avec [CakePHP](http://cakephp.org/) puis [Laravel](https://laravel.com/): la documentation doit toujours être à portée de main pour pouvoir s'y référer rapidement.
C'est chiant, mais on s'y fait.
C'est exactement la même chose avec Semantic UI: bien que la syntaxe ait une cohérence linguistique, il faut tout de même utiliser constamment la documentation pour se rappeler de l'ordre des classes (qui semble avoir une importance, je n'ai pas vérifié pour confirmer) ou, surtout, la structure HTML des contrôles.
Car c'est à mon avis là que réside le principal problème de Semantic UI: le markup.
Dans la documentation, ils ont la fâcheuse tendance, comme beaucoup d'outils modernes, à détourner certaines balises HTML de leur utilité initiale.
C'est notamment le cas de la balise ```<i></i>```.
D'après [la documentation du W3C](https://www.w3.org/TR/html51/semantics.html#the-i-element):
> The i element represents a span of text in an alternate voice or mood, or otherwise offset from the normal prose in a manner indicating a different quality of text, such as a taxonomic designation, a technical term, an idiomatic phrase from another language, transliteration, a thought, or a ship name in Western texts.
La documentation fournit par ailleurs les exemples suivants qui montrent bien l'utilisation attendue de la balise:
```
<p>The <i class="taxonomy">Felis silvestris catus</i> is cute.</p>
<p>The term <i>prose content</i> is defined above.</p>
<p>There is a certain <i lang="fr">je ne sais quoi</i> in the air.</p>
```
Semantic UI (et d'autres, Bootstrap et [Font-awesome](http://fontawesome.io/) me venant à l'esprit) réutilisent cette balise pour insérer des icônes.
C'est d'autant plus dommageable pour Semantic UI puisque contrairement à Bootstrap ou Font Awesome, [il n'est pas possible](https://github.com/Semantic-Org/Semantic-UI/blob/master/src/definitions/elements/icon.less) d'utiliser une balise ```<span></span>``` à la place.
Utiliser la balise ```<i></i>``` dans la documentation des frameworks peut être considéré pour ainsi dire comme un abus de langage.
Surtout que la balise ```<span></span>``` [n'a aucune signification particulière dans le markup](https://www.w3.org/TR/html51/semantics.html#the-span-element), il est donc plus cohérent de l'utiliser selon moi.
De même, la documentation met en avant des listes structurées avec des balises ```<div></div>``` au lieu de balises ```<ul></ul>``` ou ```<ol></ol>```.
On m'objectera bien sûr, avec raison, qu'on peut toujours modifier le code source pour résoudre le problème des icônes.
Mais Semantic UI est truffé de qualités qui minimisent ce défaut syntaxique.
Je ne suis pas encore allé jusqu'à fouiller les sources pour découvrir avec précision toutes les subtilités du framework qui n'apparaissent pas dans la documentation, mais mon tour d'horizon m'a déjà permis de voir ce qu'il était possible de faire, et surtout de comparer avec Bootstrap.
Je l'ai dis plus haut, ce que j'apprécie avec Semantic UI, c'est [l'esthétique des contrôles](http://semantic-ui.com/examples/theming.html).
Aujourd'hui, il faut reconnaître que Bootstrap [s'est pris un petit coup de vieux](https://web.archive.org/web/20160302122238/http://getbootstrap.com/examples/theme/).
Certes, on est dans l'attente d'[une nouvelle version majeure](http://blog.getbootstrap.com/2015/08/19/bootstrap-4-alpha/) (la 4.0), mais ce passage ne s'accompagnera pas de réelles nouveautés sur le plan esthétique (du moins, pas avec le thème de base).
Je ne vais pas me lancer dans un comparatif des deux frameworks, mais je vais évoquer quelques différences qui m'ont semblé importantes ou intéressantes.
Je considère que l'utilité d'un framework (qu'il soit front-end ou back-end) est d'apporter un maximum de choses, et réduire au minimum le travail du développeur.
Par conséquent, j'apprécie par exemple que Semantic UI fournisse un jeu de couleurs largement étendu par rapport à celui de Bootstrap.
Avec ce dernier, il faut se contenter de cinq couleurs de base, alors que Semantic UI fourni une palette de treize couleurs.
C'est probablement peu de chose, mais pour un développeur comme moi, qui préfère le code back-end que front-end, et qui n'a pas l'âme d'un artiste, c'est plutôt intéressant.
Sur un tout autre sujet, j'apprécie la possibilité qu'offre Semantic UI d'avoir des menus déroulants sur plusieurs niveaux, ou encore la quantité de composants fournis (notamment le [dropdown](http://semantic-ui.com/modules/dropdown.html), [les tooltips qui peuvent contenir du code HTML](http://semantic-ui.com/modules/popup.html), [les étapes d'assistant](http://semantic-ui.com/elements/step.html), [les drapeaux](http://semantic-ui.com/elements/flag.html), etc.).
Par ailleurs, certains choix techniques (par exemple, les sous-menus s'ouvrent sans clic sur l'élément parent) offrent une sensation de fluidité, de légèreté et de réactivité bienvenues.
Je relativise cependant certaines fonctionnalités présentes dans le framework.
Par exemple, l'intégration des drapeaux de [famfamfam](https://web.archive.org/web/20160304091840/http://famfamfam.com/lab/icons/flags/) est une bonne chose, parce que ces drapeaux changent extrêmement rarement.
Par contre, l'intégration de Font Awesome est une moins bonne chose parce qu'actuellement, c'est la version 4.3 qui est intégrée, alors que la dernière en date est la 4.5.
Il faut donc soit se contenter des icônes et fonctionnalités de la 4.3, soit charger à part la 4.5 et se passer de l'intégration avec Semantic UI.
Ces petits défauts ne sont pas insurmontables, mais ils me laissent un petit goût d'inachevé.
Encore une fois, il est tout à fait possible de corriger soi-même ces problèmes, ou peut être qu'ils le seront dans une prochaine version.
Quoiqu'il en soit, je vais délaisser Bootstrap pour Semantic UI pour certains de mes nouveaux projets, parce que ce framework mérite toute notre attention.
Il n'a peut être pas l'aura de Bootstrap ni même de Foundation, mais il a des qualités techniques indéniables qui, en sa version actuelle (2.1), laissent présager le meilleur pour l'avenir.

View File

@@ -0,0 +1,68 @@
---
comments_url: https://com.richard-dern.fr/post/545
date: '2016-02-14 16:24:26'
links:
- lang: fr
name: Page d'origine sur LinuxFr
url: https://linuxfr.org/users/richarddern/journaux/pourquoi-je-suis-passe-a-let-s-encrypt
tags:
- Let's Encrypt
- Certificat
title: Pourquoi je suis passé à Let's Encrypt
weather:
humidity: 85
illuminance: 11276.300000000001
precipitations: false
pressure: 991.2
source:
- open-meteo
temperature: 5.4
wind_direction: 263
wind_speed: 15.2
---
> La façon dont on gère les certificats à l'heure actuelle me pose problème.
> Le principe même de devoir recourir à une instance étrangère pour vérifier l'identité d'un serveur présente, selon moi, un risque pour l'indépendance des éditeurs.
> Pourtant, je suis passé sur Let's Encrypt.
Il y a quelques jours, [je vous parlais des certificats](https://www.athaliasoft.com/a-propos-des-certificats), et notamment de [Let's Encrypt](https://letsencrypt.org/).
Pour moi, laisser un organisme tiers décider de la validité d'un certificat revient à abandonner notre indépendance.
En effet, si nous avons la possibilité de générer des certificats auto-signés, c'est pour _pouvoir_ le faire.
Si on peut le faire, faisons-le !
En re-publiant cet article sur [LinuxFr.org](https://linuxfr.org/users/richarddern/journaux/a-propos-des-certificats), je me suis attiré les foudres de ses lecteurs.
Cet échange, bien que houleux et m'ayant laissé un goût amer, m'a fait réfléchir à ce qui était le plus important.
Par ailleurs, certains éléments d'actualité me conduisent également à réfléchir différemment.
Notamment le cas de Google, qui, dans GMail, va [afficher une alerte pour les mails envoyés sans chiffrement](http://www.nextinpact.com/news/98453-gmail-va-afficher-alerte-pour-emails-envoyes-sans-chiffrement-tls-dkim-et-spf.htm).
Bien que l'initiative de Google soit louable, je doute de son intérêt pour les utilisateurs du service.
À moins d'être technicien, à quoi bon avertir l'utilisateur que son correspondant utilise un serveur qui ne met pas en œuvre TLS (ou SPF/DKIM) ?
La seule chose que cela va provoquer chez l'utilisateur non technicien, c'est la peur.
D'autre part, ma réelle inquiétude est de savoir jusqu'où Google compte aller.
Il n'y a qu'un pas à franchir entre afficher une alerte parce que le serveur du correspondant n'utilise pas du tout TLS, et parce qu'il utilise un certificat auto-signé.
Surtout qu'en tant qu'entreprise influente, les concurrents pourraient suivre.
Je fais un raccourci, mais ça signifierait la mort des serveurs mails auto-hébergés ne souhaitant pas utiliser un service comme Let's Encrypt.
Oui, c'est une niche, les serveurs mails auto-hébergés utilisant un certificat auto-signé.
Mais ils existent, et sont là parce que c'est ça Internet: la liberté pour chacun de faire ce qu'il veut de son informatique.
Or, Google, comme à son habitude, augmente la portée de son droit de vie et de mort sur les petits acteurs insignifiants du net.
Mais on s'éloigne quelque peu du sujet.
Suite à cette annonce, et suite à mon billet sur LinuxFr, j'ai décidé de passer à Let's Encrypt, et du même coup mettre de côté mes principes.
La question est: pourquoi ?
Parce que j'écris pour que mon contenu soit lu, qu'on soit d'accord avec moi ou non.
Mon objectif est de faire réfléchir.
C'est mon utilité sur Internet.
Peut être taper à côté sur le plan technique, mais initier une réflexion, encourager à ne pas faire tout et n'importe quoi parce que Google/Apple/facebook dit que c'est comme ça que les choses doivent être faites.
Par conséquent, afin que mes visiteurs ne soient pas dérangés par l'alerte relative au certificat auto-signé (et non invalide), je suis passé sur un certificat Let's Encrypt.
Parce qu'à défaut de m'en passer, je prends ce qu'il y a de moins pire (je sais, encore une remarque qui me vaudra des insultes, peu importe).
Par extension, c'est également ce que j'ai fais sur mon serveur mail, afin de prévenir d'éventuels blocages le jour où les serveurs de mes correspondants décideraient de bloquer les certificats auto-signés.
J'espère simplement qu'un jour, on se rendra compte que pendant des années on a accusé des entreprises comme Google de s'arroger un pouvoir qu'elles n'ont pas à détenir, puis leur donner ce pouvoir parce qu'on a cru ça bon pour le grand public, avant de finalement revenir à un Internet plus authentique et proche de ses valeurs initiales.

View File

@@ -0,0 +1,46 @@
---
comments_url: https://com.richard-dern.fr/post/546
date: '2016-02-17 02:51:26'
links:
- lang: fr
name: Page d'origine sur LinuxFr
url: https://linuxfr.org/users/richarddern/journaux/un-outil-pour-gerer-une-blacklist-dns
tags:
- Blacklist
- DNS
title: Un outil pour gérer une blacklist DNS
weather:
humidity: 84
illuminance: 0.0
precipitations: false
pressure: 1023.7
source:
- open-meteo
temperature: -1.5
wind_direction: 56
wind_speed: 14.3
---
L'idée n'est pas nouvelle, évidemment, mais je voulais réaliser mon propre outil de gestion d'une blacklist DNS.
C'est une solution que je trouve, de très loin, supérieure à [AdBlock Plus](https://adblockplus.org/), pratiquement la première extension que tout le monde installe avec son navigateur préféré.
Pourquoi supérieure ?
Je vois au moins deux avantages:
- Le blocage peut s'appliquer à tout un réseau, pas juste une seule machine
- Le blocage s'applique à toute application, pas seulement le navigateur
Bien sûr, il y a aussi quelques inconvénients:
- Il faut être capable de monter un serveur DNS
- Un blocage par DNS est moins précis qu'AdBlock Plus (pas possible de ne cibler qu'une publicité spécifique sur une page)
Mon application est un outil en mode console, basé sur le framework [Lumen](https://lumen.laravel.com/).
C'est donc un outil écrit en PHP.
À la base, je l'ai écris pour mon usage personnel, mais je me suis dis que peu de modifications seraient nécessaires pour en faire une application à diffusion plus large.
J'ai donc intégré la possibilité d'écrire des parseurs pour différents formats de listes et le support pour différents serveurs DNS.
Ainsi, bien que je n'ai écris qu'un parseur pour les listes contenant un hôte par ligne et une classe de support pour bind, il sera très facile de supporter d'autres sources et d'autres serveurs rapidement.
D'ailleurs, [c'est déjà prévu](https://git.athaliasoft.com/Richard/Blacklist/issues).
- [Le dépôt gitlab](https://git.athaliasoft.com/Richard/Blacklist)

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@@ -0,0 +1,322 @@
---
comments_url: https://com.richard-dern.fr/post/547
date: '2016-02-22 22:22:28'
links:
- lang: fr
name: Page d'origine sur LinuxFr
url: https://linuxfr.org/users/richarddern/journaux/installer-un-serveur-firefox-accounts-et-firefox-sync
tags:
- Firefox Sync
- Auto-hébergement
- Firefox
title: Installer un serveur Firefox Accounts et Firefox Sync
weather:
humidity: 78
illuminance: 0.0
precipitations: false
pressure: 1010.1
source:
- open-meteo
temperature: 8.4
wind_direction: 238
wind_speed: 22.5
---
> Depuis longtemps Firefox, comme d'autres navigateurs, permet de stocker ses données dans le Cloud pour pouvoir les sauvegarder et facilement les partager entre plusieurs instances du navigateur.
> Et en plus, on peut l'auto-héberger !
> Suivez le guide.
## Pré-requis globaux
On va partir du principe qu'on veut un backend sous MySQL.
- git
- [node](https://nodejs.org/en/download/)
- [bower](http://bower.io/)
- mysql ou équivalent
Je recommande de tout mettre dans _/opt_, mais vous êtes libres de faire comme bon vous semble.
L'ensemble préfère naturellement les connexions chiffrées.
Équipez-vous donc de certificats (personnellement, j'opte pour un par serveur accessible de l'extérieur), faut de quoi votre serveur de synchronisation ne fonctionnera pas correctement.
## Backend MySQL
On récupère les sources:
```
git clone https://github.com/mozilla/fxa-auth-db-mysql.git
cd fxa-auth-db-mysql
npm install
```
On créé le fichier de configuration:
```
nano config/prod.json
```
```
{
"master": {
"host": "127.0.0.1",
"user": "root",
"password": "",
"database": "fxaccounts"
},
"slave": {
"host": "127.0.0.1",
"user": "root",
"password": "",
"database": "fxaccounts"
}
}
```
Notez que comme _fxa-auth-server_ et _fxa-content-server_ que nous verrons plus loin, _fxa-auth-db-mysql_ fait appel à [convict](https://github.com/mozilla/node-convict) pour la gestion de la configuration.
Si vous avez besoin d'autres paramètres de configuration que ceux que nous venons de créer, regardez le fichier _config/config.js_, et modifiez le fichier _config/prod.json_ en conséquence.
Notez également que la base de données n'a pas besoin d'être créée à l'avance.
Vous pouvez ensuite démarrer le serveur et vous assurer que tout va bien:
```
npm start
```
## fxa-auth-server
```
cd /opt
git clone https://github.com/mozilla/fxa-auth-server.git
cd fxa-auth-server
npm install
```
Lancez une première fois le serveur pour générer les clés de chiffrement:
```
npm start
```
Vous devriez voir la sortie suivante:
```
> npm start
> fxa-auth-server@1.56.0 start /opt/fxa-auth-server
> NODE_ENV=dev scripts/start-local.sh 2>&1
Generating keypair
Secret Key saved: /opt/fxa-auth-server/config/secret-key.json
Public Key saved: /opt/fxa-auth-server/config/public-key.json
fxa-auth-server.INFO: [...]
```
Arrêtez ensuite le serveur en faisant <kbd>Control + C</kbd>
Modifiez le fichier de configuration:
```
nano .env.dev
```
```
PUBLIC_URL=https://ffaccounts.example.org
IP_ADDRESS=0.0.0.0
CONTENT_SERVER_URL=https://ffcontent.example.org
[...]
USE_TLS=true
TLS_KEY_PATH=/etc/ssl/private/ffaccounts.key
TLS_CERT_PATH=/etc/ssl/private/ffaccounts.crt
```
Dans le cas présent, remplacez les domaines par les vôtres.
Notez que l'on va [reverse-proxyfier](https://fr.wikipedia.org/wiki/Proxy_inverse) tout ça, donc dans votre serveur web préféré, il faudra configurer un reverse proxy pour _ffaccounts.example.org_ pointant sur l'adresse de votre serveur (127.0.0.1 si le serveur web et le serveur de comptes firefox sont sur la même machine) et sur le port 9000.
De même, le reverse proxy de _ffcontent.example.org_ pointera sur le serveur de contenu (voir plus bas) sur le port 3030.
Démarrez le serveur afin de vous assurer que tout va bien:
```
npm start
```
Vous devriez voir un bloc JSON avec votre configuration.
## fxa-content-server
```
cd /opt
git clone https://github.com/mozilla/fxa-content-server.git
cd fxa-content-server
npm install
```
Si vous installez _fxa-content-server_ en tant que root, entrez la commande suivante:
```
bower --allow-root update --config.interactive=false -s
```
Si vous ne l'installez pas en tant que root:
```
npm postinstall
```
Lancez le serveur:
```
npm start
```
Ce qui aura pour effet de créer le fichier _server/config/local.json_.
Il se peut que cette commande s'arrête brusquement:
```
fxa-content-server.CRITICAL: uncaughtException Error: ENOENT: no such file or directory, open '/opt/fxa-content-server/node_modules/express-able/node_modules/able/bundle.js'
```
Lancez la commande suivante pour corriger le problème:
```
cd /opt/fxa-content-server/node_modules/express-able/node_modules/able/
npm run bundle
```
Puis, relancez le serveur:
```
cd /opt/fxa-content-server
npm start
```
Cette fois, il ne devrait plus y avoir d'erreur.
Arrêtez le serveur avec <kbd>Control + C</kbd>, il faut maintenant le configurer.
```
nano server/config/local.json
```
```
{
"public_url": "https://ffcontent.example.org",
"fxaccount_url": "https://ffaccounts.example.org",
"oauth_client_id": "98e6508e88680e1a",
"oauth_url": "http://127.0.0.1:9010",
"profile_url": "http://127.0.0.1:1111",
"profile_images_url": "http://127.0.0.1:1112",
"client_sessions": {
"cookie_name": "session",
"secret": "YOU MUST CHANGE ME",
"duration": 86400000
},
"env": "development",
"use_https": false,
"static_max_age" : 0,
"i18n": {
"supportedLanguages": ["af", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", "bs", "ca", "cs", "cy", "da", "de", "dsb", "el", "en", "en-GB", "en-ZA", "eo", "es", "es-AR", "es-CL", "es-MX", "et", "eu", "fa", "ff", $
},
"route_log_format": "dev_fxa",
"logging": {
"fmt": "pretty",
"level": "debug"
},
"static_directory": "app",
"allowed_parent_origins": ["http://127.0.0.1:8080"],
"csp": {
"enabled": true,
"reportUri": "/_/csp-violation"
}
}
```
Le plus important est de changer l'URL public pour qu'il corresponde à la variable *CONTENT_SERVER_URL*, que l'on a spécifié dans la configuration de _fxa-auth-accounts_.
Assurez-vous aussi de rajouter *fxaccount_url* puisque ce paramètre n'existe pas dans la configuration générée automatiquement.
Une fois la configuration faite, on relance le serveur:
```
npm start
```
On devrait maintenant pouvoir se connecter, créer son compte et le valider par mail.
Accédez à votre serveur avec l'adresse _https://ffcontent.example.org_ (en remplaçant bien sûr par votre propre domaine), et créez le compte.
Une fois la validation par mail effectuée, une "erreur inattendue" apparaitra.
Je ne sais pas à quoi elle est dûe, mais ne semble pas affecter négativement la suite.
On ne s'en soucie donc pas pour l'instant, mais si quelqu'un a une explication/solution, je suis preneur !
## Serveur de synchronisation
Enfin, dernière pièce de notre puzzle, le serveur de synchronisation.
La [page dédiée](http://docs.services.mozilla.com/howtos/run-sync-1.5.html) de la documentation fournie par Mozilla est plus accessible et plus à jour que celles concernant le serveur Firefox Accounts.
Voici tout de même mon guide, par soucis de centralisation et d'exhaustivité.
Les paquets suivants sont requis:
```
python-dev git-core python-virtualenv g++
```
On récupère les sources et on compile:
```
cd /opt
git clone https://github.com/mozilla-services/syncserver
cd syncserver
make build
```
On configure:
```
nano syncserver.ini
```
```
[syncserver]
public_url = https://ffsync.example.org/
sqluri = pymysql://root:motdepasse@127.0.0.1/fxsync
force_wsgi_environ = true
[browserid]
backend = tokenserver.verifiers.LocalVerifier
audiences = https://ffsync.example.org
```
Contrairement à _fxa-auth-db-mysql_, ici la base de données doit être créée avant de lancer le serveur.
Dans mon cas, je l'ai nommée _fxsync_.
Là aussi, on va créer un reverse proxy dans son serveur web préféré, pour _ffsync.example.org_ vers l'adresse du serveur de synchronisation, sur le port 5000.
On place la variable *force_wsgi_environ* à _true_ pour éviter que le scheme ne pose problème avec le reverse proxy (qui est en HTTPs) et ce serveur (qui est en HTTP).
Mettez à jour la valeur de _secret_, comme indiqué en commentaire dans le fichier.
On peut lancer le serveur:
```
make serve
```
## Configuration de firefox
Maintenant que tout est installé, reste à configurer firefox pour prendre en compte notre propre serveur de synchronisation.
Fiez-vous à la capture d'écran suivante pour ajuster vos paramètres (dans _about:config_):
![firefox](images/ff.jpeg "Source : https://www.athaliasoft.com/images/original/da2017a3d7a98884e569104479c12fc0/ff.jpeg")
Remplacez les domaines par les vôtres, bien entendu.
Remarquez qu'une option _identity.fxaccounts.allowHttp_ a été créée.
Si vous voulez vous aventurer à créer un serveur de synchronisation sans chiffrement, positionnez cette valeur à _true_.
Enfin, rendez-vous dans les options, onglet "Sync", et connectez-vous avec le compte précédemment créé.
Firefox devrait pouvoir se synchroniser sans problème.
À noter que si vous cliquez sur le lien "Gérer le compte" une fois configuré, vous aurez la même erreur inattendue que précédemment, ce qui m'incite à croire qu'elle est liée à l'absence d'un serveur d'identité.
Mais je laisse ça à un hypothétique futur article.

View File

@@ -1,18 +1,18 @@
---
comments_url: https://com.richard-dern.fr/post/1
cover: images/OfLvCd.webp
date: "2016-07-27 12:00:00"
date: '2016-07-27 12:00:00'
title: Alphabet, une entreprise pas comme les autres
weather:
temperature: 22.5
humidity: 57
pressure: 1018.3
illuminance: 104274.1
precipitations: false
wind_speed: 8.4
wind_direction: 277
pressure: 1018.3
source:
- open-meteo
comments_url: https://com.richard-dern.fr/post/1
- open-meteo
temperature: 22.5
wind_direction: 277
wind_speed: 8.4
---
Vous ne connaissez probablement pas Alphabet si vous ne vous intéressez pas à lactualité informatique.
@@ -183,4 +183,4 @@ Les concurrents de Alphabet sont peu nombreux sur certains marchés clés, comme
Il est capital que ces alternatives existent, et que dautres voient le jour, faute de quoi Internet ne sera plus réduit quà pas grand-chose : beaucoup de publicités, et au milieu, ce que Google veut bien vous laisser voir en fonction de qui vous êtes.
Il ny aura plus la place pour la découverte et la nouveauté.
Juste une zone de texte pour votre empreinte de carte bancaire et un bouton vert “Acheter”.
Cest vraiment ça que vous voulez ?
Cest vraiment ça que vous voulez ?

View File

@@ -1,17 +1,17 @@
---
date: "2016-08-02 12:00:00"
comments_url: https://com.richard-dern.fr/post/253
date: '2016-08-02 12:00:00'
title: Protection de la vie privée et conspirationnisme
weather:
temperature: 19.9
humidity: 61
pressure: 1017.5
illuminance: 30914.8
precipitations: false
wind_speed: 22.3
wind_direction: 239
pressure: 1017.5
source:
- open-meteo
comments_url: https://com.richard-dern.fr/post/253
- open-meteo
temperature: 19.9
wind_direction: 239
wind_speed: 22.3
---
Non, chiffrer ses données et avoir un peu de jugeote sur Internet ne fait pas de vous un conspirationniste…
@@ -89,4 +89,4 @@ Un amalgame qui a été fait il y a quelques jours, par… lArabie Saoudite,
Alors, nutilisez plus cette excuse bidon pour justifier votre désintérêt pour le chiffrement.
Arrêtez dêtre aussi oisifs, prenez cinq minutes pour configurer votre VPN.
Parce que si vous ne le faites pas, vous aurez bien lair con quand vous verrez vos comptes fondre comme neige au soleil.
Parce que si vous ne le faites pas, vous aurez bien lair con quand vous verrez vos comptes fondre comme neige au soleil.

View File

@@ -1,17 +1,17 @@
---
date: "2016-08-10 12:00:00"
comments_url: https://com.richard-dern.fr/post/254
date: '2016-08-10 12:00:00'
title: De l'inutilité et de l'hypocrisie d'AdBlock Plus
weather:
temperature: 16.9
humidity: 48
pressure: 1020.4
illuminance: 84635.6
precipitations: true
wind_speed: 11.8
wind_direction: 293
pressure: 1020.4
source:
- open-meteo
comments_url: https://com.richard-dern.fr/post/254
- open-meteo
temperature: 16.9
wind_direction: 293
wind_speed: 11.8
---
> Numerama annonce que facebook contourne les bloqueurs de publicité.
@@ -63,4 +63,4 @@ Pour en revenir à facebook, rappelons-leur simplement que [larticle 20 de la
Bien quelle ne soit pas toujours respectée, cette loi existe, et est faite pour protéger les internautes, et doit donc être connue et appliquée.
Même si en face on a facebook et ses milliards (de [dollars](https://web.archive.org/web/20160811065905mp_/http://uk.businessinsider.com/facebook-q1-2016-earnings-2016-4?r=US&IR=T), d[utilisateurs](https://web.archive.org/web/20160811065905mp_/http://www.journaldunet.com/ebusiness/le-net/1125265-nombre-d-utilisateurs-de-facebook-dans-le-monde/), de [publicités](https://web.archive.org/web/20160811065905mp_/http://www.numerama.com/business/185911-la-publicite-sur-les-fils-facebook-est-arrivee-a-saturation.html)).
[^1]: La méthode classique consiste typiquement à associer le nom de domaine à bloquer à ladresse 0.0.0.0. Au lieu dutiliser cette adresse, on utilise lIP dun serveur Web sous notre contrôle, ce qui permet denvoyer toutes sortes de choses. Dans mon cas, je lutilise pour renvoyer un en-tête HTTP 410, ce qui me permet de distinguer facilement les éléments bloqués dans les outils de développement de mon navigateur. Mais il est possible daller beaucoup plus loin. Une méthode commune pour détecter la mise en oeuvre dun système de blocage de pub est dattendre quun script publicitaire renvoi une certaine variable. Sil ne le fait pas, on vous affiche un message vous demandant de désactiver votre bloqueur de pub. Il suffit de faire une liste de ces variables, et de les renvoyer pour tromper lennemi. Cest de la théorie, et il ne fait aucun doute que ces faux geeks déchus finiront par trouver comment contourner cela. Si tant est que tout le monde abandonne AdBlock Plus et passe au blocage DNS. Mais comme toujours, nous trouverons aussi une parade.
[^1]: La méthode classique consiste typiquement à associer le nom de domaine à bloquer à ladresse 0.0.0.0. Au lieu dutiliser cette adresse, on utilise lIP dun serveur Web sous notre contrôle, ce qui permet denvoyer toutes sortes de choses. Dans mon cas, je lutilise pour renvoyer un en-tête HTTP 410, ce qui me permet de distinguer facilement les éléments bloqués dans les outils de développement de mon navigateur. Mais il est possible daller beaucoup plus loin. Une méthode commune pour détecter la mise en oeuvre dun système de blocage de pub est dattendre quun script publicitaire renvoi une certaine variable. Sil ne le fait pas, on vous affiche un message vous demandant de désactiver votre bloqueur de pub. Il suffit de faire une liste de ces variables, et de les renvoyer pour tromper lennemi. Cest de la théorie, et il ne fait aucun doute que ces faux geeks déchus finiront par trouver comment contourner cela. Si tant est que tout le monde abandonne AdBlock Plus et passe au blocage DNS. Mais comme toujours, nous trouverons aussi une parade.