PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Créer une page regroupant toutes les astuces en vrac ?

mercredi 19 septembre 2018 à 18:30

Dans le dernier épisode des astuces diverses, on m’a demandé si j’avais une page qui regroupait toutes les astuces sorties depuis le début. Ce n’est pas le cas, ce n’était pas prévu jusqu’à ce que mon esprit décidément mal tourné se dise que c’était peut être possible de manière semi automatisée. J’ai cherché, j’ai trouvé.

La magie de wp cli

Je ne vous ai jamais réellement parlé de cet outil, pourtant pour les utilisateurs avancés de WordPress c’est un outil indispensable à garder dans sa trousse. En l’occurrence, il dispose de beaucoup de fonctions permettant de manipuler ce qui a trait aux posts, qui dans la langue de WordPress couvre à la fois les pages et les articles.

Vous l’aurez compris, l’objectif est de récupérer le contenu des articles et de les concaténer pour les coller dans une page. Et à peu de chose près, wp cli va nous permettre de faire tout ça.

Pas à pas, en douceur

Bon, en cherchant dans la documentation, je ne trouve pas moyen d’afficher les contenus d’une catégorie. Dommage. Cependant wp post list permet d’afficher tous les articles, et d’appliquer certains filtres. Les articles portent tous le même nom, alors on va bêtement utiliser grep :

web1@vox:~/web$ wp post list |grep -i "astuces diverses"
4862	Quelques astuces diverses, quatorzième		2018-09-15 11:09:55	draft
4631	Quelques astuces diverses, treizième	quelques-astuces-diverses-treizieme	2018-08-12 10:30:09	publish
4481	Quelques astuces diverses, douzième	quelques-astuces-diverses-douzieme	2018-05-04 18:30:22	publish
4390	Quelques astuces diverses, onzième	quelques-astuces-diverses-onzieme	2018-02-19 18:30:45	publish
4239	Quelques astuces diverses, dixième	quelques-astuces-diverses-dixieme	2017-12-22 18:30:38	publish
4088	Quelques astuces diverses, neuvième	quelques-astuces-diverses-neuvieme	2017-10-26 18:30:50	publish
3933	Quelques astuces diverses, huitième	quelques-astuces-diverses-huitieme	2017-09-12 18:30:55	publish
3723	Quelques astuces diverses, septième	quelques-astuces-diverses-septieme	2017-08-11 18:30:30	publish
3538	Quelques astuces diverses, sixième	quelques-astuces-diverses-sixieme	2017-06-13 18:30:54	publish
3411	Quelques astuces diverses, cinquième	quelques-astuces-diverses-cinquieme	2017-03-31 18:30:14	publish
3224	Quelques astuces diverses, quatrième	quelques-astuces-diverses-quatrieme	2017-01-29 10:30:34	publish
3083	Quelques astuces diverses, troisième	quelques-astuces-diverses-troisieme	2016-12-12 18:30:20	publish
2961	Quelques astuces diverses, deuxième	quelques-astuces-diverses-deuxieme	2016-11-09 18:30:27	publish
2877	Quelques astuces diverses	quelques-astuces-diverses	2016-08-31 18:30:54	publish

Ajoutons quelques options pour ne garder que le titre et l’id, et filtrer sur le statut pour ne garder que les publications et pas le brouillon en cours :

web1@vox:~/web$ wp post list --post_type=post --fields=ID,post_title,post_status |grep -i "publish" |grep -i "astuces diverses"
4631	Quelques astuces diverses, treizième	publish
4481	Quelques astuces diverses, douzième	publish
4390	Quelques astuces diverses, onzième	publish
4239	Quelques astuces diverses, dixième	publish
4088	Quelques astuces diverses, neuvième	publish
3933	Quelques astuces diverses, huitième	publish
3723	Quelques astuces diverses, septième	publish
3538	Quelques astuces diverses, sixième	publish
3411	Quelques astuces diverses, cinquième	publish
3224	Quelques astuces diverses, quatrième	publish
3083	Quelques astuces diverses, troisième	publish
2961	Quelques astuces diverses, deuxième	publish
2877	Quelques astuces diverses	publish

On approche, on approche. Un des avantages de l’id, c’est que c’est une clé incrémentée en base de données. Donc plus l’article est récent, plus l’id est élevé. Pour s’assurer d’un ordre précis c’est sort qui va faire le taf :

web1@vox:~/web$ wp post list --post_type=post --fields=ID,post_title,post_status |grep -i "publish" |grep -i "astuces diverses" |sort
2877	Quelques astuces diverses	publish
2961	Quelques astuces diverses, deuxième	publish
3083	Quelques astuces diverses, troisième	publish
3224	Quelques astuces diverses, quatrième	publish
3411	Quelques astuces diverses, cinquième	publish
3538	Quelques astuces diverses, sixième	publish
3723	Quelques astuces diverses, septième	publish
3933	Quelques astuces diverses, huitième	publish
4088	Quelques astuces diverses, neuvième	publish
4239	Quelques astuces diverses, dixième	publish
4390	Quelques astuces diverses, onzième	publish
4481	Quelques astuces diverses, douzième	publish
4631	Quelques astuces diverses, treizième	publish

Pourquoi faire tout ça ? Eh bien, on peut sauvegarder le contenu de chaque article dans un fichier texte. Je teste avec un des articles pour voir si mes espoirs seront comblés :

web1@vox:~/web$ wp post get 2877 --field=content > astuces1.txt
web1@vox:~/web$ head astuces1.txt 
<p style="text-align: justify;">C'est les vacances (du moins pour moi), et même si je me concentre sur ma recherche d'appartement, je n'oublie pas le blog qui me manquait effectivement un peu, et pour lequel j'arrive à trouver de l'inspiration. Enfin presque, aujourd'hui, c'est petit pense-bête pêle-mêle (beaucoup de circonflexes là-dedans) d'astuces diverses dans différents domaines, évidemment presque toujours de la ligne de commande.</p>
<p style="text-align: justify;"><!--more--></p>

<h3 style="text-align: justify;">Un générateur de mot de passe alphanumérique</h3>
<p style="text-align: justify;">Les astuces vont souvent prendre la forme d'un alias, et voici donc le premier, un petit générateur de mot de passe aléatoire, par exemple pour la connexion à une base de données :</p>

<pre class="lang:sh decode:true ">alias passgen="strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 12 | tr -d '\n'; echo"
</pre>
<p style="text-align: justify;">On l'appelle ensuite sans paramètre, et le résultat est immédiat :</p>

Cool, pas de sérialisation ! Je vais donc pouvoir attaquer la suite, à savoir la récupération de tous les contenus, concaténés dans un seul fichier texte. Pas de mystère, on continue dans le one-liner, et donc passage par une petite boucle (n’en déplaise à Aeris qui n’aime pas for 🙂 ):

> all_posts.txt; for i in $(wp post list --post_type=post --fields=ID,post_title,post_status |grep -i "publish" |grep -i "astuces diverses" |awk '{print $1}' |sort); do wp post get $i --field=content >> all_posts.txt; echo "<hr />" >> all_posts.txt; done

On remarquera au passage que j’ajoute une ligne html finale « hr » pour séparer les épisodes, c’est plus pour la forme qu’autre chose, puisque je récupère tout le contenu, avec les introductions donc. Ensuite je crée la page depuis l’admin du site, ce qui me permettra de contrôler le taf. Je cherche via la cli l’id de la page :

web1@vox:~/web$ wp post list --post_type=page --fields=ID,post_title|grep -i "astuces diverses"|awk '{print $1}'
4979

Ce qui devrait maintenant me permettre de pouvoir mettre à jour la page :

web1@vox:~/web$ wp post update $(wp post list --post_type=page --fields=ID,post_title|grep -i "astuces diverses"|awk '{print $1}') all_posts.txt
Success: Updated post 4979.

Je vérifie ensuite dans l’éditeur, puis l’aperçu, et ma foi, ça semble bien faire le boulot :

Il ne me reste plus qu’à scripter ça proprement, ne serait-ce que pour accélérer la boucle via une variable. La prochaine fois que j’ai un article de publié je pourrais relancer cette routine et ça fera des Chocapic ! La page est disponible à cette adresse, et elle est accessible via le menu principal dans la section projets.

Est-ce qu’on peut faire mieux ?

J’en sais rien, déjà ça ça fonctionne pas mal donc je suis content, avec les filtres sur les catégories on pourrait regrouper les articles d’autres séries plus simplement que via du grep bien dégueu (et surtout avec des titres différents). Je cherche pas non plus à détecter automatiquement si un nouvel article est publié dans la série, dans une optique d’automatiser complètement la mise à jour de la page à la publication des nouveaux articles.

Mais si vous avez des idées pour tout ça je suis preneur.

transfer.sh chez soi sur Docker swarm

dimanche 16 septembre 2018 à 10:30

Transfer.sh est un site qui permet de faire du téléchargement éphémère, dans la veine de wetransfer, framadrop, dl.free.fr et d’autres que je ne connais pas mais je suis certain qu’ils sont nombreux. C’est aussi un logiciel opensource, la société DutchCoders qui l’a conçu partage le code pour que l’on puisse l’installer chez soi. Et ça tombe bien, puisque je cherche justement ce genre de service à installer sur mon cluster swarm. Mais ça s’est accompagné de quelques challenges, qui méritent un retour d’expérience.

Petit rappel sur le service

Donc, le service permet de déposer des fichiers simplement et de les partager pendant une durée de 14 jours. Sa particularité qui me plaît beaucoup, c’est la possibilité de passer un fichier via la ligne de commandes. C’est cool, ça permet d’envoyer un fichier directement depuis un serveur qui ne dispose pas forcément d’interface graphique, via curl (il y a d’ailleurs plusieurs exemples).

Et les hollandais qui l’ont écrit le maintiennent et le partagent sur Github, donc plein de bonnes raisons de s’y intéresser.

Le go c’est bien, enfin peut-être

J’adore le monde de l’open source. On peut voir des dizaines de solutions écrites dans autant de langages pour un même type de service. J’ai vu du nodejs, du php, Lufi, à la base de framadrop, est écrit en Perl, j’ai vu du Ruby… Et donc transfer.sh est écrit en Go. J’ai pas grand chose à dire sur le langage lui-même ou son utilisation dans le contexte présent, à part qu’il semble prisé des développeurs qui exploitent des applications web. Djerfy qui a commencé à taper dedans pourrait vous en parler, et les devops mouillent leur sous-vetements devant les outils d’Hashicorp qui sont majoritairement écrits en Go.

Mais comme beaucoup de soft dans le genre, les développeurs ne pensent absolument pas au fait que c’est un service et qu’on pourrait disposer d’un script quelconque plutôt que de devoir se démerder tout seul. C’est pas spécifique au langage hein, mais plutôt aux développeurs qui oublient très souvent le monde réel. Ça oblige les admins à chacun réinventer la roue dans son coin (supervisor, systemd, sysvinit, cron…), et c’est pénible.

Et Docker ?

Pareil j’ai envie de dire, si une image Docker est bien fournie pour transfer.sh, on a juste une vague ligne de commande pour le lancement en mode interactif, la « doc » tient en un petit paragraphe. Il faut commencer à fouiller le code, en particulier le Dockerfile, pour commencer à comprendre certaines choses sur l’image. Et retourner sur la documentation pour comprendre pourquoi les premières tentatives de déploiement de stack échouent sur un message foireux « no access key defined ».

En lisant le Dockerfile on voit que l’entrypoint passe des paramètres par défaut qui sont incomplets, puisque le backend de stockage sélectionné est s3 mais il faut manuellement passer les clés en environnement. Si on utilise S3 d’AWS, ce qui n’est pas mon cas. La documentation de docker compose indique qu’on peut surcharger avec la directive « entrypoint: », mais pas de bol, c’est un des rares points qui ne sont pas supportés par Socker Swarm.

La libération vient de la directive command, au début je pensais qu’il fallait repasser la commande complète mais ça ajoute juste le contenu en guise de paramètres supplémentaires à l’exécution. Donc si on veut passer --provider local --basedir /uploads au container, il fait juste le faire comme ça :

services:

  transfersh:
    image: dutchcoders/transfer.sh:latest
    command: --provider local --basedir /uploads/

La difficulté de la personnalisation

Finalement passé les quelques écueils pour les options de lancement en mode Swarm, le service est très rapidement fonctionnel. Mais un problème apparaît alors : tout est affiché pour le domaine transfer.sh, alors que je suis sur mon domaine perso. Les exemples, les liens, sont tous formatés. Le titre du site aussi.

Il a fallu fouiller de ouf dans les issues fermées du dépôt Github pour trouver un deuxième dépôt contenant les sources HTML/CSS/JS. Et là c’est l’enfer sur terre pour comprendre comment faire fonctionner la « compilation » des fichiers front. Putain, on parle de CSS, JavaScript et HTML, comment on peut avoir besoin de compilation nom de dieu (en minuscules, rappelez-vous pourquoi) ?

D’autant que ça repose sur une tetrachiée d’outils en nodejs, javascript donc, à installer sur son poste. Je passe par une image docker Ubuntu exécutée en local pour installer tout le bordel, histoire de pas saloper mon poste, et c’est long, mais long… Je parviens quand même à comprendre comment ça fonctionne, et finit douloureusement par obtenir le fameux dossier « dist » qu’il faut ensuite déposer sur le cluster, bind-mounter et « activer » via l’option --webdir (à ajouter à command donc).

Je décide à partir de là de continuer mes personnalisations directement depuis ce fameux dossier final plutôt que souffrir avec les outils affreux. C’est chiant parce qu’il y a plein de doublons du coup, mais c’est plus simple. Surtout que j’ai pris une quantité d’alertes de paquets npm obsolètes ahurissant, c’est tellement rassurant quand on doit les lancer…

Voilà donc rapidement, si vous voulez le lancer en mode Swarm chez vous (ou simplement docker-compose), à quoi ressemble le fichier :

version: '3'
networks:
  transfer:
    driver: overlay

services:

  transfersh:
    image: dutchcoders/transfer.sh:latest
    command: --provider local --basedir /uploads/ --web-path /web/
    environment:
      - "PUID:1001"
      - "PGID:1001"
    networks:
      - transfer
    ports:
      - "8080:8080"
    volumes:
      - /home/docker/transfersh/uploads/:/uploads/
      - /home/docker/transfersh/web/:/web/
    deploy:
      replicas: 1
      restart_policy:
        condition: any

Quelques points noirs à traiter

Apparemment, le code est maintenu doucement, en soi c’est pas un gros problème. Il y a par contre un truc qui me gène, c’est que l’appli tourne avec l’utilisateur root. Il y a une issue à ce sujet mais apparemment ils sont pas pressés de traiter ce point. Je vais donc voir si je ne vais pas être obligé de mettre les mains dans le cambouis pour traiter le mal via un Dockerfile adapté. C’est un mal nécessaire si vous tentez de déployer ce service sur un cluster OpenShift, qui interdit l’utilisation de root.

Un autre point chiant, là j’ai pas compris pourquoi, il ne prend pas à chaud les mises à jour de contenus ou de template sans redémarrage de l’application. En soi c’est pas méchant mais ça reste pénible. Le fait est qu’une fois terminé on y touche plus trop, mais bon…

Quelques liens en vrac et en français, 28° édition

lundi 3 septembre 2018 à 18:30

Comme vous avez probablement pu le constater, le mois de juillet a été particulièrement calme pour une bonne raison : je n’avais pas l’énergie une fois rentré chez moi pour écrire suffisamment longtemps pour vous sortir quelque chose de structuré. Une situation qui s’est un peu amélioré en Août. Mais j’ai toujours autant de temps de trajet, et donc toujours autant de lecture. Après avoir accumulé quelques articles intéressants, il est temps de vous les (re)mettre en lumière. Bonne lecture 🙂

La carte de fidélité et le profilage. Bienvenue à bord

Vous avez certainement entendu parler de pistage et de profilage en ligne, notamment depuis l’arrivée du RGPD où les sites sont censés vous demander votre consentement explicite et éclairé avant de procéder (ce que la plupart ne font pas correctement, voire pas du tout, donc en totale illégalité). Mais sachez qu’il n’y a pas que sur le Web que vous êtes traqués de tous les côtés, et vos si chères cartes de fidélité sont encore plus toxiques pour votre vie privée.

Ce que les projets open source ne doivent pas oublier

Les projets libre et open-source sont devenus des éléments vitaux pour continuer de garder un semblant de contrôle sur notre univers informatique (et par extension, de plus en plus de ce qui constitue notre vie). Mais les développeurs, encore très souvent, sont trop concentrés sur le fonctionnement lui-même et oublient quelques étapes essentielles pour la diffusion de leur bébé, en premier lieu leur installation ailleurs que chez eux.

Héberger les marque-pages Firefox

Contrairement aux autres navigateurs qui proposent la même fonction, la synchronisation des marque-pages et de l’historique de Firefox repose sur des composants logiciels que Mozilla a publié, et le navigateur peut être paramétré pour utiliser sa propre installation plutôt que les silos de données de Google ou de Microsoft. Toutefois l’installation de ces composants chez soi est particulièrement mal documentée et même moi j’ai jeté l’éponge. Mirabellette était plus motivé que moi, a réussi, et nous partage donc à la fois en anglais et en français les étapes nécessaires pour avoir une installation fonctionnelle. Reste encore les composants Firefox Accounts qui sont encore plus compliqués à faire fonctionner.

Envie de livres du domaine public ?

Malgré les velléités des sociétés de défense du « droit d’auteur » illimité (j’appelle ça mafia, mais bon, il parait que ça passe pas bien de leur dire la vérité), à un moment donné les œuvres de l’esprit, qu’elles soient écrites, chantées, dessinées, sculptées, que sait-je encore, bref ces œuvres s’élèvent dans le domaine public. Ce qui veut dire qu’il n’y a plus aucune restriction autre que technique à leur diffusion au plus grand nombre sans avoir à rendre de compte. En cherchant des bouquins électroniques pour ma maman pour les vacances en Espagne, je tombe sur ce site qui a une section domaine public que je ne peux que vous conseiller de fouiller.

Tout savoir sur les batteries : mythes, astuces et avenir

Les technologies de batterie sont au cœur des objets que nous utilisons au quotidien : smartphones, ordinateurs portables, tablettes, montres et autres bracelets connectés, et maintenant trottinettes, voitures électriques voire autonomes, bientôt semi-remorques. On peut entendre bien des choses, voire même avoir peur lorsque la presse nous fait dans le sensationnalisme au moindre incident. Cet article d’frandroid est vraiment pas mal foutu et suffisamment didactique pour faire un bon tour du sujet et faire sauter quelques mythes.

Vous avez dit peering ?

On l’oublie souvent, mais Internet n’est pas un seul réseau géant mais bien l’interconnexion de plusieurs réseaux entre eux. Cette interconnexion passe par plusieurs méthodes, le peering étant la principale d’entre elles, du coup, autant vous partager cet article parce que je n’aurais probablement jamais écrit celui-ci moi-même.

Comment bloquer Red Shell, le spyware des gamers

Espionner les utilisateurs et collecter des données sur leur comportement est devenu la norme chez les sociétés technologiques, et c’est un problème global qui touche jusque l’univers du jeu vidéo. Ce nouveau mouchard se répand dans plusieurs jeux populaires. Fort heureusement, les bonnes vieilles méthodes sont toujours efficaces pour enrayer un peu cette saloperie…

Contourner le mot de passe admin Windows

En dehors du chiffrement du disque, vous pouvez faire tout ce que vous voulez pour sécuriser votre machine, à partir du moment où vous avez un accès physique, il y a peu de choses que l’on ne peut pas faire. Ici, il s’agit de contourner une sécurité qui est le mot de passe de l’administrateur Windows. Cette manipulation n’a jamais pu être corrigée par Microsoft.

#RGPD : Les « dark patterns », ou comment s’asseoir sur le Règlement

Devoir vous demander explicitement votre accord pour vous espionner est une vraie plaie pour toutes les sociétés dont leur principale source de revenu est le profil qu’ils tirent des données qu’ils collectent sur votre comportement. Et donc ils font tout pour continuer de pouvoir collecter « légalement » tout ce qui les intéresse chez vous, à savoir le maximum de choses, en vous trompant sur les choix que vous allez faire.

Restriction des commandes SSH sur clés publique /privée

J’ai déjà pu dans le passé vous présenter des moyens de donner des droits ou de limiter l’élévation des privilèges à un utilisateur sous Linux. Récemment j’ai appris qu’on pouvait même aller un peu plus loin en limitant carrément les commandes autorisées via une connexion SSH, en ajoutant quelques options en fonction de la clé privée/publique renseignée. Plutôt pratique pour pouvoir utiliser le même compte mais avec des possibilités différentes en fonction de la clé utilisée.

Comment convertir vos images en WebP et les afficher avec Nginx

Tout comme le MP3, le JPG est dans les parages depuis très, très longtemps, certains diront trop. Quelques formats ont tenté de jouer les prétendants au trône, comme JPEG2000, avec l’absence de succès que l’on sait. Mozilla a proposé d’améliorer les outils pour la compression JPG, Google a voulu capitaliser sur les travaux issus du rachat d’On2 Technologies et de son codec VP8 d’abord destiné à la vidéo pour proposer un format d’image de haute qualité qui est capable de prendre moins de place que ce bon vieux JPG. Bien que le support au sein des navigateurs soit limité, si vous voulez exploiter ce format sur votre site, vous trouverez tous les détails dans cet article.

Secure Shell mon amour déchu ?

Tout comme pour TLS, SSH ne sera réellement efficace pour sécuriser vos communications que s’il est correctement paramétré. Si on vous a déjà dit que la qualité de la clé compte, c’est également vrai pour le reste des paramètres du serveur et/ou du client. Y’a plus qu’à suivre le guide d’Arnaud Minable qui porte mal son nom.


Ça fait plus que d’habitude, et encore j’ai écrémé parce que certains ont fini dans d’autres articles. Ce que je trouve rassurant, contrairement à ce que constate Cyrille de son point de vue, c’est que j’ai pas l’impression que la production francophone se calme. Par contre, c’est vrai que c’est pas toujours évident de mettre la main dessus, et certains ont été trouvés par hasard. Ceci explique peut-être cela…

Pourquoi on est « sécurisé » en HTTPS ?

dimanche 26 août 2018 à 10:30

Est-ce que vous avez déjà entendu parler d’HTTPS ? Est-ce que vous savez vraiment ce que c’est, à quoi ça sert, comment ça marche, et donc, de quoi on parle quand on dit que c’est sécurisé ? Vous l’aurez compris, nous voilà parti pour un nouvel article de vulgarisation dans le monde merveilleux du Web. Car HTTPS, c’est un peu la colonne vertébrale du Web moderne. Autant connaître un peu ce qui fait tenir tout ce petit monde debout. Surtout que ça vous arrive tous les jours un peu plus sous le nez, donc difficile de l’ignorer plus longtemps.

Au commencement était HTTP

HTTP, c’est la langue du web. C’est ce qui fait que votre navigateur (Internet Explorer, Firefox, Chrome, Edge, vous l’avez ?), sait comment demander l’affichage d’un site web. Comme beaucoup de langages de communication créé avant le début des années 2000 (le bon terme c’est protocole), HTTP est un protocole texte « en clair », à savoir que toutes les communications ne sont pas protégées. Toutes les informations circulent en texte brut, ce qui veut dire que toute personne qui se trouve entre votre machine et celle du site web en face peut lire tout ce que vous transmettez. Pire, on peut les modifier à la volée, ce qui permet toutes sortes de joyeusetés, comme injecter des malware à la volée, modifier des images…

Très tôt, quand on a compris qu’on pourrait faire autre chose que d’échanger des documents publics sur le web (au hasard, monter une boutique pour que des gens puissent y acheter des choses), il a fallu trouver le moyen d’éviter que ces éléments de base en clair puissent être interceptés et lus. Il serait fâcheux que votre numéro de carte bleue soit lisible par tout un chacun sans effort. Évidemment, on a vite trouvé une solution.

Au 7° jour, dieu créa HTTPS

Pas besoin de sortir de Saint-Cyr pour comprendre que le S rajouté au bout veut dire Secured, soit Sécurisé en français. Il s’agit basiquement d’ajouter une couche de chiffrement, aux fondements mathématiques suffisamment forts et souples pour permettre à une variété importante d’appareils de nature et de puissance différente de pouvoir communiquer ensemble à un niveau acceptable de sécurité. Au départ, on a utilisé SSL, pour Secure Socket Layer, qui finit par faire montre de faiblesses mathématiques (et surtout était d’abord développé par une société privée), mais entre temps il a été supplanté par TLS, Transport Layer Security, au développement ouvert et standardisé.

Celui-ci a connu quelques révisions, et si la version 1.2 est actuellement encore considérée comme sûre, son futur doit être assuré par la version 1.3 qui vient tout juste d’être publiée après quatre ans de discussions musclées entre partisans de la surveillance de masse (aussi appelée surveillance étatique), et ceux qui pensent que la sécurité est une priorité pour nos communications. Pour ceux qui voudraient se faire mal avec les détails techniques, l’excellent résumé de la RFC de Stéphane Bortzmeyer est là pour vous ravir. Et si vous voulez un résumé historique de SSL et de TLS, il y a également cet article d’OpenWeb qui est fort sympathique. Ce qu’on doit retenir c’est qu’actuellement, globalement les communications sont plutôt sures. Quand elles sont faites en HTTPS évidemment, ce qui n’est pas si trivial pour pas mal de monde : récemment j’ai passé une heure au téléphone pour expliquer et conseiller un client sur les challenges à passer ses sites en HTTPS…

Une sécurité aux buts multiples

Le but premier d’HTTPS est de rendre la communication inintelligible pour le commun des mortels qui tenteraient d’écouter aux portes de l’échange entre votre appareil et le serveur en face. L’idée est que si quelqu’un tente d’intercepter la communication, il ne verra que du bruit ou presque (il y a moyen de récupérer quelques informations comme le domaine mais ça se limite à ça).

Un autre but du HTTPS est de garantir à un visiteur l’identité du site visité. Ce qui n’est pas si idiot si on veut que la communication soit confidentielle. En effet, le protocole repose sur l’utilisation de certificat dit X509 (on parle de certificat SSL par abus de langage), dont la génération repose sur des autorités de certification qui sont des intermédiaires de confiance. Lorsque le site présente son certificat, il est marqué d’une signature cryptographique propre à l’autorité en question, et le navigateur vérifie si la signature est correcte. En cas d’erreur, pas de communication.

On peut aussi optionnellement s’assurer de l’identité du client avec le même type de certificat, ça se fait sur certaines applications notamment en entreprise. Mais ce n’est pas réservé à l’entreprise, Djerfy a fait un article il y a quelques années pour montrer comment verrouiller l’administration d’un blog WordPress avec cette méthode.

Et enfin, et c’est lié à la garantie de l’identité du site, le protocole assure que les contenus émis par le serveur ou le client ne sont pas modifiés en route. Si c’est le cas, la communication est coupée car elle n’est plus mathématiquement propre. Vous pensez que c’est inutile ? Un opérateur au Canada commence à injecter des publicités par dessus le contenu des sites que vous visitez s’ils ne sont pas en HTTPS.

Petite introduction au fonctionnement du protocole

Allez, on va pas échapper à une petite section technique, si ça vous embête passez au chapitre suivant, personne ne vous en voudra et ce n’est pas vital pour terminer l’article. Donc, vous cherchez à atteindre https://www.facebook.com, que ce soit via votre navigateur ou l’application mobile. Votre appareil va alors initier une demande de connexion chiffrée en indiquant si possible le domaine (www.facebook.com) sur lequel il veut se connecter. Il annonce en même temps la version maximale du protocole de chiffrement qu’il supporte, ainsi que les algorithmes de chiffrement qu’il aimerait utiliser.

En face, le serveur répond en affichant son certificat, ainsi que sa propre version maximale et les algorithmes qu’il supporte. Votre appareil, avant de continuer, vérifie que ce certificat a été émis par une autorité de certification reconnue. Si ce n’est pas le cas, il vous crachera une erreur et n’ira pas plus loin, car l’un des deux prérequis à l’utilisation, la garantie de l’identité, n’est pas vérifié. S’ensuit alors une série d’échanges pour finaliser les différents paramètres cryptographiques (avec notamment la signature du certificat qui repose sur une clé privée et une clé publique), qui permettront de chiffrer la communication et surtout de la rendre unique. A la fin c’est le serveur qui décide, vu que c’est lui qui dispose du certificat.

Ces deux premières étapes sont appelées « handshake », littéralement poignée de main, qui est souvent un signe qu’on s’est mis d’accord; J’ai pu lire chez Stéphane Bortzmeyer « protocole de salutation » qui est une jolie traduction non littérale 🙂 Parmi ces échanges sont définies mathématiquement des clés de chiffrement qui seront uniques. De sorte que même si avec le temps on arrive à déchiffrer une communication enregistrée au préalable, les clés découvertes ne pourront pas permettre de déchiffrer de futures  communications entre les mêmes participants. Voilà ce que peut indiquer votre navigateur quand la connexion est établie :

On voit que le site a été vérifié, et que le certificat utilisé a une date d’expiration. En bas, dans les détails techniques, on voit la version de TLS utilisée (1.3, oui oui, fraîchement finalisé qu’il est déjà déployé par certains gros acteurs), ainsi que de la suite de chiffrement, dans laquelle ont voir de l’AES sur 128 bit en mode GCM, ce qui est loin d’être dégueulasse même si pas le top du top qui existe, avec une méthode de hashage SHA256, qui est toujours considéré comme sûr à l’heure actuelle. Donc techniquement parlant, on est sur du très bon, pas le plus furieux mais je pense que c’est sélectionné pour des raisons de performance : on pourrait par exemple passer sur AES256 mais le coût en calcul est beaucoup plus élevé puisqu’on double la taille de la clé. Idem pour SHA256, il est possible d’utiliser encore plus élevé, avec les mêmes conséquences, ça serait lus lourd à calculer et du coup tout paraîtrait plus lent.

Mais ça ne sont que les paramètres sur lesquels mon Firefox et Facebook se sont mis d’accord. Si on regarde tout ce que Facebook supporte, on voit qu’il est capable de proposer bien pire. Pour une raison simple : même si vous avez encore un ordinateur sous Windows XP, ou un smartphone avec Android 2.X, alors vous pourrez tout de même consulter Facebook. Mais dans ce cas vous êtes un bon candidat à la crucifixion, parce que c’est juste irresponsable d’utiliser encore ce genre de configuration de nos jours.

De quoi HTTPS ne protège pas ?

Le rôle d’HTTPS est donc de garantir l’intégrité du transport du contenu d’un site du serveur vers le client ainsi que de l’identité dudit serveur et/ou dudit client. Mais ce n’est pas son rôle de s’occuper du contenu en question, ni du reste de l’environnement du client et du serveur. HTTP, c’est HyperText Transfer Protocol, pas antivirus. Si votre machine est déjà infectée par divers malwares conçus pour voler des informations, le fait que le transport de celles-ci soit protégé n’empêchera pas nécessairement le malware de capturer la saisie avant l’envoi et de retransmettre ces informations à une personne malveillante.

Même si vous êtes clean, on a déjà un historique plutôt fourni de sites qui se sont vus infectés pour servir du code malveillant aux visiteurs. Et là non plus HTTPS n’est d’aucune aide, puisque le contenu est compromis en amont. Il est donc tout à fait possible de se faire également voler des infos et infecter dans ce contexte.

Un dernier élément est le phishing, traduit hameçonnage en français (ça va c’est pas affreux comme traduction). Si vous recevez un faux mail se faisant passer pour votre opérateur de téléphonie ou votre banque, vous invitant à cliquer sur un lien et entrer vos coordonnées, notamment bancaires, si le site ressemble comme deux gouttes d’eau à l’original, qu’il est sur un domaine complètement différent mais que le certificat est valide, l’utilisateur la plupart du temps verra « cadenas vert » et ne se posera pas plus de questions sur l’adresse réelle qui se trouve à côté. Et pourtant on est clairement dans une situation où les informations saisies seront récupérées à des fins malveillantes. HTTPS n’est donc d’aucune aide dans le mauvais comportement des utilisateurs.

Alors, sécurisé ou pas ? Les navigateurs mentent-ils ?

Évidemment que l’on est sécurisé en HTTPS, mais il faut bien comprendre les limites de cette sécurité. Comme souvent en informatique, le meilleur des outils ne sera aussi bon que par l’usage qui en est fait par les gens. D’un certain point de vue les actions de Google, décidément trop influent sur le monde numérique, sont malgré tout à saluer, à savoir favoriser le HTTPS dans les résultats de son moteur de recherche, ainsi qu’alerter méchamment sur son navigateur qu’un site n’est pas sécurisé quand il est chargé « en clair ». Mais tout n’est pas parfait et il est possible de galvauder un peu cette sécurité, de sorte qu’il faut continuer à éduquer les gens sur les dangers du phishing, qui reste une activité très lucrative pour les criminels; quand bien même les ransongiciels et les mineurs de cryptomonnaies ont le vent en poupe. Avec un trafic mail estimé à 95% de spam, pas étonnant que ça reste un morceau de choix.

Ironie du sort, Android à salement tendance à utiliser leurs serveurs DNS maison plutôt que celui fourni par votre connexion (4G, Wifi), de sorte que toute personne qui utilise son smartphone partage en permanence à minima les domaines qu’il utilise avec la maison mère. Et quand les utilisateurs ajoutent un compte Google dessus, là c’est toute l’activité en ligne qui se retrouve enregistrée là-bas. Après on va hurler que Firefox est hypocrite quant à la vie privée de ses utilisateurs (c’est en partie vrai), mais là, hein, ça ne semble déranger personne…

Installation offline de .Net Framework 3.5 sur Windows 10

jeudi 23 août 2018 à 18:30

Il y a des logiciels qui n’en finissent pas de mourir. Par exemple, quand on doit se taper l’installation de ce putain de client lourd VMWare qui demande une version antédiluvienne du framework de Microsoft (qui installe aussi J#, mais ça je vais éviter d’en parler pour l’instant). Parce que quand vous manipulez du Private Cloud OVH, certains aspects de votre cluster (backup, reverse des bloc d’IP) ne sont accessibles que via des plugins de ce client. Au moins ça évite de se taper Flash (oui parce que bon, tout le monde ne bosse pas encore avec ESX 6.5). Enfin presque.

Pourquoi je peste ? Parce que le client lourd de VMware est en cours d’abandon, n’a pas évolué depuis la version 5.5 d’ESXi, donc toutes les nouvelles fonctionnalités ne sont pas disponibles sur ce client. Mais OVH a trouvé le moyen de ne proposer des plugins que pour cette interface, pour la gestion intégrée du backup des VM via Veeam ainsi que de la manipulation des reverse IP des blocs affectés à votre pcc. Le reste devant se faire via le web client, toujours en flash intégral en version 6.0, partiellement HTML5 dans la version 6.5 qui n’est toujours pas installée par défaut et dont la mise à niveau n’est pas prise en charge en temps normal par OVH (alors même que pas mal de fonctionnalités liées à vSphere sont inaccessibles en raisons de limitations imposées par OVH sous couvert de service…). Et l’interface Web est nécessaire pour toutes les fonctionnalités récentes, ou la gestion du firewalling NSX par exemple. Pour la blague, sur mon ordi le seul moyen pour que ça soit « stable » c’est d’utiliser Chrome et sa version de flash embarqué, un autre collègue c’est Edge qui est le seul capable de ne pas planter toutes les deux secondes, Firefox a déclaré forfait depuis longtemps, bref, il y a les vœux pieux des créateurs de standards universels, et la réalité du monde professionnel avec ses affreuses habitudes 🙁

Et je peste encore plus sur Windows 10, car le client demande l’activation du .Net Framework 3.5, qui est proposé en tant que composant optionnel (via les « fonctionnalités »), lui aussi zombifié, mais allez savoir pourquoi, depuis un an leur activation sur les machines que l’on a au boulot échoue lamentablement, et même les gars des moyens internes déclarent forfait face à cette erreur.

Finalement, c’est le tout fraîchement débarqué Pierre-Marie (l’élu de mon billet de recrutement) qui a trouvé une solution que je détaille ici en Français, un grand merci à lui donc. On commence par récupérer une iso fraîche correspondant normalement à la version installée sur votre poste Windows 10 via l’URL dédiée sur le site de Microsoft. Petit tip : si vous accédez à l’URL sous Linux, vous aurez accès directement à l’ISO, sinon Microsoft ne vous fournit que le Media Creation Tool, une horreur sans nom et lente à crever mais qui atteint le même résultat. Cette image ISO, il faut ensuite la monter grâce à l’outil maintenant intégré à Windows (enfin dirons certains, 20 ans après Linux), ça lui attribuera une lettre libre :

Ouvrez ensuite une invite Powershell en mode administrateur, et saisissez la commande suivante (adaptez la lettre de lecteur avec celle qui a été attribuée) :

Dism /online /enable-feature /featurename:NetFx3 /All /Source:X:\sources\sxs /LimitAccess

Si tout se passe bien vous devriez avoir un message « Success ». Il ne vous reste plus qu’à relancer l’installation du client lourd VMware, et à subir le jonglage entre les deux interfaces. Bon courage 🙂 Par contre, ne me demandez pas pourquoi Microsoft trouve encore le moyen de vautrer son système comme ça, mais après tout, il commence à avoir l’habitude, je ne m’étonne plus de rien…