Le Journal de Nikrou - GénéralCe journal n'est pas un blog!2024-01-09T15:52:56+01:00urn:md5:501048fab0be4d1978e39dded54e4f42DotclearQuel beau ciel bleu breton !urn:md5:7bd51ac1ab5596f9a739022ae078940e2023-07-11T09:16:00+02:002023-07-11T08:24:24+02:00NicolasGénéralBretagne <p>Pour ne pas trop changer les bonnes habitudes, une petite excursion en Bretagne, du côté de Ploudalmézeau.</p>
<p><a class="media-link" href="https://static.nikrou.net/public/PXL_20230709_131226818.jpg"><img alt="" class="media" src="https://static.nikrou.net/public/.PXL_20230709_131226818_m.jpg" /></a></p>Où est la mer ?urn:md5:2028aca0a9c43feb5a7f10c28ac7340a2022-08-25T07:32:00+02:002022-08-25T06:33:14+02:00NicolasGénéralmontagne <p>Cette année, je ne suis pas en vacances en Bretagne. La mer me manque bien évidemment mais que la montagne est belle ! </p>
<figure><a class="media-link" href="https://static.nikrou.net/public/IMG_20220825_073039.jpg"><img alt="" class="media" src="https://static.nikrou.net/public/.IMG_20220825_073039_m.jpg" /></a></figure>
<p> </p>Bienvenue à Primelinurn:md5:c0eb72cd711583e1ff77773d7828c7002021-07-17T20:17:00+02:002021-07-18T15:33:38+02:00NicolasGénéralBretagne <p>Ce n'est pas le pays bigouden mais c'est pas mal non plus.</p>
<figure><a class="media-link" href="https://static.nikrou.net/public/IMG_20210718_163158.jpg"><img alt="" class="media" src="https://static.nikrou.net/public/.IMG_20210718_163158_m.jpg" /></a></figure>
<p> </p>Leroy Merlin invente le devis gratuit, payant !urn:md5:16340296bf1c7b8b1faf25b7150c74f92021-05-25T09:03:00+02:002021-05-25T08:14:49+02:00NicolasGénéralarnaquecommercetromperie <p>Leroy Merlin est une enseigne spécialisée dans l'amélioration de l'habitat. Le magasin n'est pas très loin de chez moi et je m'y rends régulièrement.</p>
<p>le 15/04/2021 je suis allé au magasin <a href="https://www.leroymerlin.fr/">Leroy Merlin</a> le plus proche de chez moi pour faire faire un devis pour le remplacement d'une fenêtre. J'ai pris les mesures mais le vendeur me conseille de faire intervenir un technicien chez moi pour qu'il prenne les mesures. Le prix est de 45€ mais il m'explique que si j'accepte ce devis ces 45€ seront déduits du montant global.</p>
<p>Avant d'accepter je demande au vendeur une estimation du prix que pourrait me coûter ce remplacement de fenêtre. La pose de la fenêtre est de l'ordre de 200€. Pour la fenêtre, il y a deux possibilités : soit c'est une fenêtre aux dimensions standard et le prix est entre 100 et 200€. Si la fenêtre est sur mesure le prix est entre 300 et 400€. Donc dans le cas le moins favorable l'ordre de grandeur de mon devis devrait être de 600€.</p>
<p>Du coup j'accepte la proposition et un rendez-vous est pris pour qu'un technicien passe. Quelques jours plus tard le technicien est passé. J'attendais des nouvelles du vendeur. Sans nouvelle je suis passé au magasin le mercredi 5 mai. Le vendeur me dit qu'il me rappelle au plus tard vendredi. Il me rappelle finalement samedi et m'envoie un devis par mail. Et là j'ai la désagréable suprise de voir un devis pour le remplacement de ma fenêtre d'un montant de 1223,67€.</p>
<p>Je n'ai pas pu rappeler le vendeur samedi. Lundi 10 mai j'appelle le magasin. La personne que je finis par avoir au bout du fil me dit qu'elle ne peut pas transférer l'appel. Elle prend mon message et me dit que le vendeur va me rappeler. Le lendemain (le 11 mai) le vendeur ne m'a toujours pas rappelé. Je voulais encore croire que c'était un malentendu et que le montant de ce devis n'était pas le bon. J'aurais aimé que le vendeur me rappelle dans les plus brefs délais avec un montant du devis tel que l'on avait convenu oralement. Ma fille qui était avec moi a entendu les mêmes montants que moi. Si le vendeur m'avait annoncé un montant de plus de 1200€ pour le remplacement d'une fenêtre j'aurai refusé directement.</p>
<p>Ayant eu depuis le vendeur au téléphone a commencé baffouiller de vagues excuses : "le montant annoncé oralement n'est qu'une estimation". Mais faire une estimation et se tromper de 10% ou de même de 20% cela reste encore valable. Mais se tromper du simple au double c'est que l'estimation n'était pas bonne.</p>
<p>C'est la première fois et très certainement la dernière fois que je fais faire un devis "gratuit" chez <a href="https://www.leroymerlin.fr/">Leroy Merlin</a>. Mais finalement mon devis n'est pas gratuit puisque j'ai payé 45€ pour rien. Leroy Merlin a inventé un nouveau concept : le devis gratuit, payant. </p>
<p>Le service téléphonique chez Leroy Merlin est déplorable : impossible d'avoir directement un vendeur. Il faut passer par l'accueil qui ne peut pas transférer les appels. Chez Leroy Merlin vous êtes restés bloqués au 20è siècle ?</p>
<p>Cette mésaventure me donne une très mauvaise image de <a href="https://www.leroymerlin.fr/">Leroy Merlin</a>. Le vendeur a certes fait uniquement son travail. Mais à mon sens il y a eu tromperie. J'hésite à contacter une association de défense du consommateur ou à poster mon histoire sur le site <a href="https://www.lesarnaques.com/">les anarques</a>. Peut-être que cela aurait plus de poids !</p>
<p>Si quelqu'un de la société <a href="https://www.leroymerlin.fr/">Leroy Merlin</a> passe sur ce blog et lit ce billet, je suis prêt à régler ce différend rapidement et à l'amiable. Ce n'est pas grave de me perdre comme client. Vous pensez peut-être même que c'est une bonne chose, mais le bouche à oreille fonctionne vraiment très bien sur le web ! A bon entendeur.</p>Mondial Relay - retour à l'envoyeururn:md5:2d42d4b816a167b3d70939b39f8c02bd2021-03-23T17:23:00+01:002021-03-23T18:01:02+01:00NicolasGénéralarnaquecommerceinternet <p>Ces dernières semaines, étant donné la période sanitaire, j'ai envoyé plusieurs colis contenant des pots de miel plutôt que de les remettre en main propre. Je prends le temps de bien emballer mes pots avec du papier à bulles, des journaux froissés, en espaçant les pots et en laissant de l'espace avec le bord du carton. Je respecte <a href="https://www.mondialrelay.fr/faq/envoyer-un-colis/comment-emballer-mon-colis/">les préconisations</a> faites par <a href="https://www.mondialrelay.fr/">Mondial Relay</a>.</p>
<p>Mais le dernier envoi s'est moins bien passé.</p>
<div class="mosaique">
<figure style="float:left"><a class="media-link" href="https://static.nikrou.net/public/envoi2.png"><img alt="" class="media" src="https://static.nikrou.net/public/.envoi2_m.png" /></a></figure>
<figure style="float:left"><a class="media-link" href="https://static.nikrou.net/public/envoi4.png"><img alt="" class="media" src="https://static.nikrou.net/public/.envoi4_m.png" /></a></figure>
</div>
<p style="clear:both">J'ai envoyé 3 pots : un a été cassé et un s'est ouvert. Ce n'est vraiment pas de chance. En faisant un envoi par l'intermédiaire de <a href="https://www.mondialrelay.fr/">Mondial Relay</a>, on souscrit une assurance obligatoire et on peut lire sur la page des tarifs la mention suivante :</p>
<blockquote>Chacune de nos livraisons est assurée à hauteur de 25€ TTC frais de port inclus.</blockquote>
<p>De plus, pour bien préciser les choses la mention suivante précise bien dans quel cas la garantie s'applique :</p>
<blockquote>Ces niveaux d'indemnisation forfaitaire garantissent la perte ou l'avarie constatée* lors de l'acheminement de votre colis (frais de port compris). <em>*Sous réserve d'emballage conforme comme décrit <a href="https://www.mondialrelay.fr/solutionspro/offres-et-services/offre-start/preparation-de-votre-colis/" title="Préparation de votre colis">ici</a></em></blockquote>
<p>Je suis du coup rassuré et j'écris au service de suivi, <a href="mailto:suividecolis@mondialrelay.fr">par mail</a></p>
<p>Quelques jours plus tard je reçois la réponse laconique suivante :</p>
<blockquote>Nous vous remercions pour votre demande et vous présentons toutes nos excuses pour ce désagrément. Malheureusement, nous ne pourrons pas prendre en compte votre demande d’indemnisation. En effet, la livraison du colis ayant été effectuée, le transfert de responsabilité est avéré et nous ne pouvons être tenu responsables des dégâts subis ni de son contenu. Nous rappelons que le colis peut être refusé lorsque l’emballage est défectueux.</blockquote>
<p>Et là je suis perplexe et je ne comprends pas comment aurait dû procéder la personne à qui j'ai envoyé ce colis. La semaine précédente, je lui ai envoyé 6 pots (Et oui c'est un gourmand!!) et tout est arrivé en parfait état. Du coup, à aucun moment il ne s'est posé de question quant à l'état du contenu. De plus le carton était en parfait état et ne laissait pas présager d'un contenu cassé. Selon les dires de <a href="https://www.mondialrelay.fr/">Mondial Relay </a>il aurait dû refuser le colis. Mais dans ce cas, on ne peut pas recevoir de colis. Devant tant de mauvaise foi, je ne sais plus quoi penser.</p>
<p>Toujours est-il que la prochaine fois, je chercherais un autre prestataire pour faire mes envois. <a href="https://www.mondialrelay.fr/">Mondial Relay</a> a certes de nombreux clients, pour la plupart contents du service rendu. La confiance en une société s'acquiert doucement. Mais en ayant envoyé plusieurs colis d'affilé sans soucis j'avais confiance en cette société. Le simulacre de service client a annihilé cette confiance. Cette perte de confiance est ensuite très dure à regagner. De plus elle se propage très vite. </p>
<p>SI quelqu'un de la société <a href="https://www.mondialrelay.fr/">Mondial Relay</a> lit ce billet, je suis prêt bien évidemment à régler ce léger différend à l'amiable. </p>Mise à jour du blogurn:md5:4a30a6fcf6d7116cf50ec38cdfb399362021-02-08T18:12:00+01:002021-02-08T18:12:00+01:00NicolasGénéralhttps <p>Le <a href="https://www.nikrou.net/post/2017/02/26/https-partout">site est en https</a>, et le certificat que j'avais configuré à ce moment là avait une note A+ délivrée par <a href="https://www.ssllabs.com/">Qualys SSL Labs</a> . Mais pour rester à l'état de l'art, il faut s'informer et continuer à mettre à jour. Depuis quelques temps, si le serveur accepte TLS 1.0 ou 1.1 alors la note passe automatiquement à B. Du coup, j'ai modifié la configuration d'apache comme suit :</p>
<code class="language-apacheconf">SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1</code>
<p>Les protocoles SSLv3, TLSV1 et TLSV1.1 sont considérés comme non sécurisés du fait de failles connues</p>Mettre à jour correctement ses dépendances avec npmurn:md5:1cf6720b2b82b83b80b27099b14b37682019-11-22T08:03:00+01:002019-11-22T08:03:00+01:00NicolasGénéralclicommandenpmshell <p>npm est le gestionnaire de paquets officiel de node.js. C'est un outil qui s'utilise en ligne de commande. Il permet de gérer les dépendances et la mise à jour de celles-ci.</p>
<p>Pour installer un paquet il suffit de taper la commande suivante :</p>
<pre>
<code class="language-shell">npm install <nom_du_paquet></code></pre>
<p>Si on veut que ce paquet soit une une dépendance de notre projet il faut ajouter l'option <strong>-S</strong>. Cela va ajouter le paquet dans le fichier <strong>package.json</strong>.</p>
<p>Pour désinstaller le paquet il suffit de taper la commande suivante :</p>
<pre>
<code class="language-shell">npm uninstall <nom_du_paquet></code></pre>
<p>Il y a de nombreuses options et diverses commandes. L'option help est votre amie.</p>
<p>Pour en revenir au titre, lorsqu'on veut installer toutes les dépendances d'un projet, dans le README du projet ou dans la procédure d'installation on trouve souvent la commande suivante :</p>
<pre>
<code class="language-shell">npm install</code></pre>
<p>Cette commande va bien installer les dépendances en se basant sur celles présentes dans le fichier package.json en respectant les syntaxes des versions :</p>
<ul>
<li>soient les versions exactes si on a précisé les 3 nombres de laversion x.y.z où x représente la version majeure, y la version mineure et z les versions avec seulement des corrections de bugs. </li>
<li>soient les versions avec correction de bug si on a par exemple 1.2.x</li>
<li>soient les versions équivalentes si on a mis par exemple ~1.2.3</li>
<li>soient les versions compatibles si on a mis ^1.2.3</li>
<li>...</li>
</ul>
<p>Les <a href="https://docs.npmjs.com/files/package.json#dependencies" hreflang="en">syntaxes</a> sont nombreuses pour couvrir les différents cas.</p>
<p>Lorsqu'on utilise la commande <strong>npm install</strong>, avec ou sans nom de paquet derrière cela créé ou met à jour un fichier <strong>package-lock.json</strong> qui contient les versions exactes de toutes les dépendances installées. Du coup si on veut que la fabrication des fichiers cibles de son projet soit reproductible de manière fiable il faut être sûr de toujours utiliser les mêmes versions que ce soit en développement, en tests, en validation et à fortiori sur la production. Il faudrait exploiter le contenu du fichier <strong>package-lock.json</strong>. La commande <strong>npm install</strong> ne se base pas sur ce fichier. Mais depuis npm version 5.7.0 il existe une autre commande de npm qui permet d'exploiter le fichier <strong>package-lock.json</strong> :</p>
<pre>
<code class="language-shell">npm ci</code></pre>
<p>De cette façon le build est reproductible et on a une chaîne de mise en production fiable. Je m'étonne de ne pas voir plus souvent cette commande au lieu de simplement <strong>npm install</strong> ou <strong>npm i</strong>.</p>Application horloge qui plante sous LineageOS 15.1urn:md5:b68200a1e55c49e8a2a3d04ad6e0468e2018-09-03T19:53:00+02:002018-09-03T19:09:00+02:00NicolasGénéralandroidlineageos <p>J'ai mis à jour dernièrement un <a href="https://www.oneplus.com/fr/one">OnePlus One</a> dans la version 15.1 de <a href="https://lineageos.org/">LineageOS</a>. Sans raison apparente l'application horloge qui sert par exemple à se réveiller en musique le matin plante dès qu'on la lance. Je redémarre le téléphone sans plus de réussite.</p>
<p>En creusant un peu, j'ai fini par trouver une solution. Il suffit de supprimer un fichier dans le répertoire <strong>/data</strong>. Ce répertoire appartient à root et il faut donc obtenir les droits dans une application terminal (ou via <a href="https://developer.android.com/studio/command-line/adb">adb</a>) :</p>
<pre><code class="language-sh">$ su -</code></pre>
<p>Généralement cela échoue lamentablement. Une autre solution est de redémarrer en mode recovery : lorsque le téléphone est éteint il suffit de le redémarrer en maintenant enfoncé la touche "volume bas". Ensuite il suffit d'ouvrir un terminal via adb (encore) :</p>
<pre><code class="language-sh">$ adb shell</code></pre>
<p>Puis ensuite il faut trouver le fichier <strong>alarm.db</strong> dans le répertoire <strong>/data</strong> :</p>
<pre><code class="language-sh"># find /data -type f -name 'alarm.db'</code></pre>
<p>J'ai eu en sortie le fichier suivant : ./data/user_de/0/com.android.deskclock/databases/alarms.db</p>
<p>Et après on peut le supprimer tranquillement :</p>
<pre><code class="language-sh"># rm ./data/user_de/0/com.android.deskclock/databases/alarms.db</code></pre>
<p>Et en redémarrant, l'application fonctionne normalement.</p>https partouturn:md5:8d4447aa0c8d148d32a3838c963ccff02017-02-26T13:48:00+01:002017-02-26T18:41:58+01:00NicolasGénéralhttpsperformances<p>Pour suivre la ligne <a href="https://www.eff.org/fr/https-everywhere" hreflang="fr" rel="external">https partout</a> et pour continuer à déployer mes certificats <a href="https://letsencrypt.org/" hreflang="en" rel="external">Let's Encrypt</a>, j'ai déployé le protocole <abbr title="HyperText Transfer Protocol Secure" lang="en">HTTPS</abbr> sur tous mes sites. J'en ai profité pour essayer d'améliorer la sécurité mais aussi les performances des différents sites du point de vue des visiteurs.</p> <p>J'avais <a href="https://www.nikrou.net/post/2015/12/01/Un-beau-certificat-ssl-sur-toutes-les-pages" rel="external">commencé à tester et utiliser Let's Encrypt</a> sur ce blog. Depuis quelques jours les sites suivants sont en https par défaut :</p>
<ul>
<li>https://www.nikrou.net/ : le blog courant</li>
<li>https://static.nikrou.net/ : le serveur qui délivre les médias (images, vidéos) de ce blog.</li>
<li>https://photos.nikrou.net/ : ma galerie photos personnelle (non publique) qui utilise encore <a href="http://piwigo.org" rel="external">Piwigo</a> mais qui devrait bientôt passer sur <a href="https://www.phyxo.net/" rel="external">Phyxo</a>.</li>
<li>https://www.phyxo.net/ : la page du projet Phyxo</li>
<li>https://demo.phyxo.net/ : le site de démonstration de Phyxo</li>
<li>https://blog.phyxo.net/ : le blog du projet Phyxo</li>
<li>https://ext.phyxo.net/ : le site des extensions (plugins, thèmes, langues) du projet Phyxo.</li>
</ul>
<p>Quand je dis que ces sites sont en https par défaut ce n'est pas tout à fait assez précis : en fait ils ne sont plus accessible en http. Si on y accède en http, une redirection permanente est faite côté serveur.</p>
<p>J'ai essayé de faire les choses le mieux possible en m'appyuant sur différents outils. Mes certificats pour mes deux noms de domaines ont le niveau A+ :</p>
<p><a href="//static.nikrou.net/public/ssl.www.nikrou.net.png" title="ssl.www.nikrou.net.png"><img src="//static.nikrou.net/public/.ssl.www.nikrou.net_m.png" alt="ssl - www.nikrou.net" /></a> <a href="//static.nikrou.net/public/ssl.www.phyxo.net.png" title="ssl.www.phyxo.net.png"><img src="//static.nikrou.net/public/.ssl.www.phyxo.net_m.png" alt="ssl - www.phyxo.net" /></a></p>
<p>Vous pouvez vérifier sur le site <a href="https://www.ssllabs.com" hreflang="en" rel="external">Qualys SSL Labs</a> et contrôler votre site.</p>
<p>Avec la même idée de sécurisé le mieux possible j'ai ajouté de nombreux entêtes https à mes pages de manières automatique.</p>
<h3>Informations du serveur</h3>
<p>Je donne le minimum d'information, c'est-à-dire juste le serveur que j'utilise, à savoir apache. Je ne donne ni sa version, si la version de PHP.</p>
<p>L'entête http correspondante est :</p>
<pre><code class="language-conf">
Server: Apache
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre>
<code class="language-apacheconf">
ServerTokens Prod
ServerSignature Off
</code>
</pre>
<h3>Mécanisme HSTS - HTTP Strict Transport Security </h3>
<p>L'idée est de dire aux navigateurs de n'utiliser que le protocole https. Le navigateur remplace alors tous les URL non sécurisé (en http - sans le s) par leur équivalent sécurisé.</p>
<p>L'entête http correspondante est :</p>
<pre> <code class="language-conf">
Strict-Transport-Security: max-age=16000000; includeSubDomains; preload
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre> <code class="language-apacheconf">
Header always set Strict-Transport-Security "max-age=16000000; includeSubDomains; preload"
</code>
</pre>
<p>Le paramètre <em>max-age</em> correspond à environ 60 jours ce qui correspond aussi au moment où mes certificats se renouvellent automatiquement.</p>
<h3>Referrer Policy</h3>
<p>Quand on navigue sur un site et que l'on suit un lien externe, le site cible à des informations d'où l'on vient. Cela peut-être utile pour savoir par exemple par quelle recherche un visiteur est venu. L'idée de cette entête http est de contrôler ce que l'on transfère.</p>
<p>L'entête http correspondante est :</p>
<pre> <code class="language-conf">
Referrer-Policy: strict-origin-when-cross-origin
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre> <code class="language-apacheconf">
Header always set Referrer-Policy: "strict-origin-when-cross-origin"
</code>
</pre>
<p>Il y a de nombreuses configurations possibles. J'ai choisi de ne transmettre l'<abbr title="Uniform Resource Locator" lang="en">URL</abbr> complet que lorsque la requête à la même origine et qu'elle est toujours en https. Dans le cas contraire rien ne sera envoyé.</p>
<h3>X-Content-Type-Options</h3>
<p>De nombreux navigateurs essaient de "sniffer" des fichiers qui n'ont pas de type mime correct pour essayer de les exécuter. Cela peut-être source de faille et du coup je bloque.</p>
<p>L'entête http correspondante est :</p>
<pre> <code class="language-conf">
X-Content-Type-Options: nosniff
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre> <code class="language-apacheconf">
Header always set X-Content-Type-Options: "nosniff"
</code>
</pre>
<h3>X-Xss-Protection</h3>
<p>L'idée est de protéger les utilisateurs (via leur navigateur) contre les attaques XSS</p>
<p>De nombreux navigateurs essaient de "sniffer" des fichiers qui n'ont pas de type mime correct pour essayer de les exécuter. Cela peut-être source de faille et du coup je bloque.</p>
<p>L'entête http correspondante est :</p>
<pre> <code class="language-conf">
X-Xss-Protection: 1; mode=block
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre> <code class="language-apacheconf">
Header always set X-Xss-Protection "1; mode=block"
</code>
</pre>
<h3>X-Frame-Options</h3>
<p>L'idée est d'autoriser ou non un site à embarquer notre site dans le sien au moyen de frames. On se protège ainsi du clickjacking en empêchant un site d'embarquer mon site et ainsi tromper les visiteurs légitimes.</p>
<p>L'entête http correspondante est :</p>
<pre> <code class="language-conf">
X-Frame-Options: deny
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre> <code class="language-apacheconf">
Header set X-Frame-Options: "deny"
</code>
</pre>
<h3>CSP</h3>
<p><abbr title="Content Security Policy" lang="en">CSP</abbr> est un entête qui envoie des directives de sécurité au navigateur concernant les ressources à utiliser que ce soit des images, des scripts ou des feuilles de styles css. J'ai défini des règles minimales qui fonctionnent au moins pour les parties publiques de mes sites. Pour les parties administrations j'ai encore des choses à corriger mais ce n'est pas très complexe.</p>
<p>L'entête http correspondante est :</p>
<pre> <code class="language-conf">
Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' static.nikrou.net photos.nikrou.net; upgrade-insecure-requests; form-action 'self'; frame-ancestors 'none'; connect-src 'self' www.nikrou.net ; report-uri https://nikrou.report-uri.io/r/default/csp/reportOnly
</code>
</pre>
<p>La configuration correspondante d'apache est :</p>
<pre> <code class="language-apacheconf">
Header always set Content-Security-Policy: "default-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' photos.nikrou.net; upgrade-insecure-requests; form-action 'self'; frame-ancestors 'none'; connect-src 'self' www.nikrou.net ; report-uri https://nikrou.report-uri.io/r/default/csp/reportOnly"
</code>
</pre>
<p>Je n'ai pas mis en place HTTP Public Key Pinning qui me permet un peu complexe à mettre en place et surtout un peu critique. Je vais continuer à investiguer pour mesurer le risque.</p>
<p>Avec ces différents directives j'obtiens un score de A sur <a href="https://securityheaders.io/">securityheaders.io</a> :</p>
<p><a href="//static.nikrou.net/public/www.nikrou.net.png" title="www.nikrou.net.png"><img src="//static.nikrou.net/public/.www.nikrou.net_m.png" alt="www.nikrou.net" /></a><a href="//static.nikrou.net/public/www.phyxo.net.png" title="www.phyxo.net"><img src="//static.nikrou.net/public/.www.phyxo.net_m.png" alt="www.phyxo.net" /></a></p>
<p>Le site <a href="https://www.dareboost.com">Dareboost</a> passe mon score à 91%. C'est au niveau du contenu qu'il faut que je travaille pour améliorer le score, notamment le début d'affichage qui est un peu long.</p>
<p><a href="//static.nikrou.net/public/nikrou.net.dareboost.com.png" title="nikrou.net.dareboost.com.png"><img src="//static.nikrou.net/public/.nikrou.net.dareboost.com_m.png" alt="nikrou.net - dareboost.com" /></a></p>Un beau certificat ssl sur toutes les pagesurn:md5:e6c78afd0c988206b6da20c7da6e39ab2015-12-01T13:53:00+01:002016-02-07T12:22:46+01:00NicolasGénéralhttps <p>Depuis quelques jours, on peut naviguer sur <a href="https://www.nikrou.net">ce blog en https</a>, en version TLS 1.2. Au départ, j'avais oublié de créer un
certificat pour mon sous-domaine static qui me sert à livrer les fichiers statiques, en particuler les images. Du coup la page n'était pas considérée comme sûre
par la plupart des navigateurs car le contenu était mixte : page en https mais certaines ressources en http (sans le s).</p><p>Les certificats délivrés
par <a href="https://letsencrypt.org/">Let's Encrypt</a> ne sont valides que 90 jours. Il faut donc penser à les renouveler. Comme je ne suis pas une machine,
je vais forcément oublier et donc j'ai ajouté <a href="https://fr.wikipedia.org/wiki/Cron#GNU_mcron">une tâche automatique</a> pour faire ça automatiquement.
Ma tache est lancé tous les jours et je renouvelle le certificat s'il a moins de 30 jours.</p><p>J'ai cloné et installé le dépôt
<a href="https://github.com/letsencrypt/letsencrypt">d'outils fourni par Let's Encrypt</a> et j'ai mis la configuration de mon certificat dans un fichier .ini qui
ressemble à ça :</p><pre><code class="line-numbers language-ini">domains = www.nikrou.net,static.nikrou.net
rsa-key-size = 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = YOUR_MAIL@YOUR.DOMAIN
authenticator = webroot
webroot-path = PATH/TO/DOCUMENTROOT
</code></pre><p>Je peux alors lancer la mise à jour de mon certificat en faisant simplement :</p><pre><code class="line-numbers language-bash">$ ./letsencrypt-auto -c path/to/cli.ini
</code></pre><p>Du coup pour que la mise à jour se fasse automatiquement, il suffit de créer une nouvelle entrée dans le répertoire <strong>/etc/cron.daily</strong> avec
le contenu suivant, par exemple :</p><pre><code class="line-numbers language-bash">#!/bin/sh
DAY_LIMIT=30
TIMESTAMP_LIMIT=$(($DAY_LIMIT*86400))
OPENSSL=/usr/bin/openssl
SSL_PEM=PATH_TO_PEM_CERTIFICATE
MAIL=/usr/bin/mail -s "[ssl] Update" YOUR_EMAIL@YOUR.DOMAIN
PATH_LETSENCRYPT=PATH_TO_LETSENCRYPT_INSTALLATION
if $OPENSSL x509 -checkend $TIMESTAMP_LIMIT -noout -in $SSL_PEM
then
echo "Certificate is valid for more than $DAY_LIMIT days. Do not update." | $MAIL
else
cd $PATH_LETSENCRYPT && ./letsencrypt-auto -c /etc/letsencrypt/cli.ini
if [ $? -ne 0 ];then
echo "Something goes wrong. Cannot update ssl certificate. Need to validate it manually" | $MAIL
else
echo "Certificate has been updated" | $MAIL
fi
fi
exit 0
</code></pre><p>Il faut renseigner l'adresse mail, le chemin vers votre certificat (fichier PEM) et le répertoire où letsencrypt est installé. Il ne faut pas oublier de rendre ce fichier exécutable. J'ai créé <a href="https://github.com/nikrou/tools/">un dépôt git</a> avec <a href="https://github.com/nikrou/tools/blob/master/letsencrypt">ce script</a> si vous avez des corrections ou des idées d'amélioration.</p>Le blog sécuriséurn:md5:07853984d00e9dad6c6ed714df7fd04c2015-11-18T09:55:00+01:002015-11-24T11:01:19+01:00NicolasGénéralhttps <p>Depuis quelques jours, <a class="ref-post" href="https://www.nikrou.net/pages/Ce-journal-n-est-pas-un-blog%21">ce blog qui n'en est pas réellement un</a> peut-être lu en <a href="https://www.nikrou.net/">https</a>. Mon certificat est signé par <a href="https://letsencrypt.org/">Let's Encrypt</a>. Let's Encrypt fournit des certificats gratuitement. Tout cela n'est pas encore ouvert pour tout le monde. Mon nom de domaine est en beta privé. Normalement la beta publique devrait être ouverte en décembre.</p><p>Mon certificat est valide 90 jours. Je n'ai pas encore fait le nécessaire pour le renouveler automatiquement. En attendant si vous lisez cet article, dans la barre du navigateur vous pouvez voir quelque chose comme ça : </p><p><img class="media" alt="https.png" src="//static.nikrou.net/public/https.png" /></p><p> Pour que l'on puisse regarder le site aussi bien en http qu'en https, il faut aller dans les paramètres du blog et enlever le protocole, c'est-à-dire mettre //www.nikrou.net/ au lieu de https://www.nikrou.net</p>Comment relancer chrome sans perdre les onglets déjà ouverts ?urn:md5:14de7a86c7836b05d897e906737e58362015-11-08T19:18:00+01:002015-11-08T20:00:17+01:00NicolasGénéraldebiangoogle <p>J'utilise le navigateur <a href="https://www.google.fr/chrome/browser/desktop/">google chrome</a> pour plein de mauvaises raisons mais pour au moins deux bonnes, parce qu'il est rapide et qu'il répond à mon besoin.</p><p>Je ne le laisse pas se mettre à jour tout seul et je le mets à jour en utilisant le système de mise à jour de <a href="https://www.debian.org/">mon système d'exploitation</a>. Je ne redémarre que très rarement mon ordinateur et je garde de très nombreux onglets ouverts pour des pages que je veux lire plus tard mais pas que je veux nécessairement mettre en favoris. Mais lorsque je veux mettre à jour mon navigateur sans perdre tous ces onglets j'obligeais chrome à s'arrêter en faisant un <strong>kill -TERM</strong> suivi du processus père. chrome offre, comme d'autres navigateurs, la possibilité de récupérer la dernière session en cas de crash, cela me permettait de récupérer mes chers onglets.</p><p>Mais il y a bien plus simple, il suffit de taper dans la zone d'adresse : <a href="chrome://restart">chrome://restart</a>.</p>J'aime dotclear - j'y contribueurn:md5:62fc7c5b2ac31c03d2accfd88d84b8992015-05-20T20:13:00+02:002015-05-20T19:15:40+02:00NicolasGénéralassociationdondotclearlogiciel libre <p>J'utilise <a href="http://fr.dotclear.org/">dotclear</a> pour motoriser ce blog depuis de très nombreuses années. dotclear, c'est aussi une <a href="http://fr.dotclear.org/association">association</a> et du coup on peut y adhérer en cottisant. J'ai renouvellé ma cottisation mais je pense qu'il ne faudrait surtout pas hésiter à faire passer le message pour relancer les adhérents non à jour de leur cottisation !</p>
<p><a href="http://fr.dotclear.org/blog/post/2015/05/20/Contribuer-%C3%A0-Dotclear-%3A-yes-you-can-%21">Comme le dit Anne</a>, il peut y avoir des effets de bords, devoir manger des crêpes, faire un séminaire <a href="http://www.leguilvinec.com/">au Guilvinec</a> et le plaisir de rencontrer de nombreuses personnes toutes plus sympathiques les unes que les autres.</p>
<p>Du coup, si vous utilisez dotclear, que vos poches ne sont pas complètement vide et que vous voulez contribuer un peu à dotclear, adhérer à l'association.</p>
<p>p.s: Vous pouvez aussi tout simplement <a href="http://fr.dotclear.org/donate">faire un don à dotclear</a>.</p>Je n'entends pas le bruit bizarre !urn:md5:4c0a7dc4ee4019bce1fb5f363a2c09fb2014-11-29T19:11:00+01:002014-11-29T20:05:35+01:00NicolasGénéral<p>Il y a quelques semaines j'ai laissé ma voiture à mon garage habituel. Le matin, je passe au garage, je donne les "consignes". Une personne me dépose à la gare et vient me chercher le soir après ma dure journée de labeur pour que je reprenne possession de mon véhicule.</p>
<p>Comme d'habitude, je dépose donc mon véhicule en précisant que j'entends un bruit étrange, pour ne pas dire bizarre. En roulant doucement mais aussi à l'arrêt. Le patron me dit qu'il va regarder ou écouter !!</p> <p>Le soir, en arrivant à la gare j'appelle le garage pour qu'on vienne me chercher. Pas de soucis, peu de temps après le patron arrive avec un véhicule. On parle de choses et d'autres. Je lui demande s'il a trouvé le problème. Il me dit que malheureusement il n'a rien trouvé. On entre dans le garage. Mais il ne coupe pas le moteur et ouvre la porte.</p>
<p><q>Vous entendez le bruit, là ?</q></p>
<p>Je lui dis que non mais en même temps ce n'est pas ma voiture donc ce n'est pas forcément surprenant. Il est venu me chercher avec une saxo rouge et j'ai une saxo rouge. Il a cherché une panne sur la voiture d'un autre client en croyant que c'était ma voiture. Forcément ça nous a fait beaucoup rire. Il a appelé son collègue pour lui dire qu'il était normal qu'ils n'aient rien trouvé.</p>
<p>Peu de temps après je rentre ma voiture dans le garage. Il ouvre le capot et entendent tous les deux presque tout de suite le bruit bizarre. N'étant pas très doué en mécanique, je ne saurai dire précisément quel était le problème. De ce que j'ai compris, une courroie était détendue et la partie à l'intérieur tournait dans le vide provoquant le bruit. Il me déconseille de reprendre mon véhicule et me prête gentiment un véhicule de courtoisie.</p>
<p>C'est un petit garage et la probabilité de trouver le même véhicule était très faible. En tout cas, il s'en rappelle encore je pense. J'ai une pleine confiance en ce garage et même si je n'y connais pas grand chose en mécanique, je ne pense pas qu'il abuse de la situation. Et cerise sur le gâteau, le patron et les employés sont très sympathiques.</p>Et encore une migration kimsufiurn:md5:66edae0d9c3835607f2f735d8cf68f8a2014-10-18T18:34:00+02:002014-10-18T18:51:06+02:00NicolasGénéraldnskimsufiphyxopiwigo <p>Non non je n'ai pas fait de grossière erreur d'orthographe dans le titre de mon billet ! <a href="https://www.nikrou.net/post/2010/06/20/Migration-vers-un-nouveau-Kimsufi">Comme en 2010</a>, je suis en train de migrer mon serveur dédié (un kimsufi) pour bénéficier de la mise à jour matérielle, de plus de mémoire, de plus d'espace disque et pour un prix moindre. Mais cette fois c'est un peu plus compliqué car il n'y a plus de possibilité d'<a href="http://guide.ovh.com/IpFailover" hreflang="fr" rel="external">IP en fail-over</a> sur les nouveaux serveurs. </p>
<p>J'ai décidé de faire plus simple qu'il y a 4 ans :</p>
<ul><li>J'ai configuré mon nouveau serveur avec tous les services identiques. </li>
<li>J'ai déplacé toutes mes données.</li>
<li>J'ai récupéré le contenu des bases de données que j'ai réimporté dans les nouveaux serveurs de base de données sur le nouveaux serveur.</li>
</ul>
<p>Il me restera à me débarrasser du serveur mysql en migrant ma galerie photos de <a href="http://fr.piwigo.org/" hreflang="fr" rel="external">piwigo</a> à <a href="http://www.phyxo.net/" rel="external">Phyxo</a>. Et le dicton se vérifie toujours : les cordonniers sont les plus mal chaussés. En utilisant Phyxo, ma galerie photos utilisera PostgreSQL.</p>
<p>Après avoir vérifié que tout fonctionnait sur le nouveau serveur, il fallait indiquer au monde entier que je changeais de serveur. Enfin de manière plus modeste, il fallait mettre à jour les <a href="http://fr.wikipedia.org/wiki/Domain_Name_System" hreflang="fr" rel="external">DNS</a>. Je voulais éviter l'interruption de service et sans IP supplémentaires, la solution la plus simple est de faire tourner tous les services sur les deux machines. Ensuite sur l'ancien serveur dans la configuration DNS de mon nom de domaine j'indique l'adresse IP du nouveau serveur. Normalement avec tout cela il ne devrait pas y avoir d'interruption.</p>
<div>Si vous lisez ce billet c'est que la propagation s'est déjà faite sur le DNS que vous interrogez.
</div>Une version de maintenance de dotclearurn:md5:bdd9ebabe77e3c0362fdadc6523c00632014-08-20T11:38:00+02:002014-08-20T11:38:00+02:00NicolasGénéraldebiandotclear <p>Une version de maintenance de dotclear est <a href="http://fr.dotclear.org/blog/post/2014/08/18/Dotclear-2.6.4" hreflang="fr" rel="external">sortie avant-hier</a>. Elle corrige deux failles potentielles. La mise à jour du package debian a été faite, a été uploadé sur les serveurs et devrait être disponible rapidement. </p>Les jours de la semaineurn:md5:2f213ef9c0eee7d0a20f13f7597d8ee72013-11-08T10:49:00+01:002013-11-08T10:49:00+01:00NicolasGénéralchansonpaternité <p>Lundi, les canards vont à la mare, mare, mare ...</p>
<p>Mardi, ils s'en vont jusqu'à la mer, mer, mer ...</p>
<p>Mercredi, ils organisent un grand jeu, jeu, jeu ...</p>
<p>Jeudi, ils se promènent dans le vent, vent, vent ...</p>
<p>Vendredi, ils se dandinent comme ça, ça , ça ...</p>
<p>Samedi, ils se lavent à ce qu'on dit, dit, dit ...</p>
<p>Dimanche, ils se reposent et voient la vie en rose. La semaine recommencera demain, COIN COIN.</p>Mise à jour de PostgreSQLurn:md5:41569929af07b391efc6ac86e286e78d2013-10-13T20:19:00+02:002016-02-07T14:10:41+01:00NicolasGénéraldebianpostgresql <p>Mon serveur <a hreflang="en" rel="external" href="http://www.postgresql.org/">PostgreSQL</a> était encore en version 8.4 depuis un moment et j'ai décidé de faire la mise à jour. Rien de plus simple :</p>
<pre><code class="language-bash"># apt-get install postgresql-9.3
# pg_dropcluster 9.3 main --stop
# pg_upgradecluster 8.4 main</code></pre><p>Le changement de port se fait aussi pendant la migration. A la fin du script de mise à jour l'ancien cluster est arrêté. On peut le relancer mais il faudra se rappeler qu'il sera accessible sur le port 5433 au lieu de 5432 (par défaut évidemment). </p>Bon anniversaire dotclearurn:md5:6fa078bd773b52946abc3c23fc3670332013-08-13T10:39:00+02:002013-08-13T10:39:00+02:00NicolasGénéraldotclear <p>Aujourd'hui <a href="http://fr.dotclear.org/" hreflang="fr" rel="external">dotclear</a> fête ses 10 ans. En effet, le 13 août 2003, un certain <a href="http://neokraft.net/" hreflang="fr" rel="external">Olivier</a> a publié <a href="http://neokraft.net/2003/08/13/nouveau-cms" hreflang="fr" rel="external">une première version de son CMS</a>, dotclear. </p>
<p>Je l'utilise avec bonheur depuis de nombreuses années. Le projet, comme tout projet, a connu des hauts et des bas. Depuis quelques temps, j'essaie de contribuer et de me rapprocher (sans leur faire peur) de l'équipe qui conçoit ce formidable outil. C'est avec un réel plaisir que je découvre l'envers du décors.</p>
<p>Longue vie à dotclear et à dans 10 ans !</p>Il faut sauver le soldat dotclearurn:md5:c7abe8739d4c38d10a56e9b650044b182013-07-09T20:58:00+02:002013-07-09T20:01:31+02:00NicolasGénéral <p><a href="http://fr.dotclear.org/" hreflang="fr" rel="external">dotclear</a>, la plateforme de blog a fêté ses 10 ans mais sous <a href="http://fr.dotclear.org/blog/post/2013/07/09/42" hreflang="fr" rel="external">assistance respiratoire</a>. Sans chef, le bateau peut-il encore avancé ? Mais le bateau ressemble peut-être trop à un bateau fantôme. Des chantiers ont été mené dans l'ombre (utilisation de twig comme moteur de template, refonte de l'initerface,...) mais peut-être pas assez visible côté public.</p>
<p>J'utilise dotclear pour <a href="https://www.nikrou.net/pages/Ce-journal-n-est-pas-un-blog%21">ce blog qui n'en est pas réellement un</a> depuis <a href="https://www.nikrou.net/post/2004/02/26/2-creation-du-journal">début 2004</a>. J'en co-maintiens le <a href="http://packages.qa.debian.org/d/dotclear.html" hreflang="en" rel="external">package debian</a>. Cela ne peut pas s'arrêter comme ça.</p>