De nombreux sites ont été pensé, exploités, alimentés en contenus, en partant du principe qu'ils étaient accessibles à travers le protocole http. Le passage au protocole sécurisé https nécessite des modifications techniques au niveau du serveur mais il peut également nécessiter des modifications des contenus !
La raison en incombe aux principes de sécurisation et de composition des pages web. Ainsi, un page à laquelle on accède via https, ne doit inclure que des éléments eux mêmes récupérés via https. Par exemple, les images affichées dans la page devront avoir une URL du type https://.… Il en ira d'une iFrame qui permet d'insérer dans une page web, le contenu d'une autre page web.
Lorsqu'une page à laquelle on accède par https contient des éléments référencés en http, il y a un mélange de contenus que l'on désigne sous l'appellation mixed-content. On parle également de mixed-content dans le cas inverse, c'est-à-dire lorsqu'une page à laquelle on accède en http contient des éléments référencés en https. Ce second cas ne soulève pas de difficulté pratique alors que le premier conduit à des situations de blocage.
En effet, si l'internaute utilise un navigateur récent, une page à laquelle on accèdera en https n'affichera pas les éléments référencés en http. Autrement dit, les images, média et iframes utilisant une URL http://... ne seront tout simplement pas affichés !
Avant de faire basculer l'accès à un site de http à https, il convient donc de s'assurer que les contenus du site sont convenablement référencés. Il faut donc traquer la présence de mixed content dans toutes pages du site. Une telle opération d'analyse ne peut raisonnablement être conduite manuellement. Elle doit s'appuyer sur des outils permettant son automatisation. Une fois les anomalies répertoriées, la correction de certaines d'entre-elles pourra1) faire l'objet d'un traitement automatisé. D'autres seront corrigées manuellement.
Le logiciel libre mixed-content-scan vise précisément, comme son nom l'indique, à parcourir un site entier2) pour détecter et signaler les anomalie de types mixed content. La suite de l'exposé s'appuit sur l'utilisation de cet outil. Les particularité de l'installation de l'outil sous Debian est décrite par ailleurs.
Documentation d'utilisation de mixed-content-scan : https://github.com/bramus/mixed-content-scan/blob/master/readme.md
Avant de se lancer dans l'analyse d'un site on s'assure du bon fonctionnement du dispositif de test. Dans un terminal, lancer l'application par la commande suivante :
$ mixed-content-scan https://mon_domaine/
L'application doit afficher une succession de lignes, dans une syntaxe un peu particulière.
Dans la phase exploratoire, il est fréquent que les certificats (tls/ssl) utilisés par le serveur ne soient pas soient pas authentifiés tout en étant techniquement conformes. On souhaite alors procéder un test sans contrôle de validité des certificats. La commande à passer est légèrement différente :
$ mixed-content-scan https://mon_domaine/ --no-check-certificate
L'enregistrement des résultats est trivial :
$ mixed-content-scan https://mon_domaine/ --no-check-certificate > result.txt
Le fichier de résultats d'analyse contient toutes les informations nécessaires mais n'est pas directement exploitable. En fonction du processus de travail retenu pour l'exploitation des résultats, on effectuera un conversion du fichier brut dans un format de travail.
Vu la nature du traitement à réaliser, un traitement s'appuyant sur les expression régulières est suffisant. Le fichier sed suivant en est l'illustration :
# This file : clean2csv.sed # Version CSV # Suppression des lignes inutiles /(INFO|CRITICAL)/ d # Suppression des préfixes et postfixes inutiles s/.*MCS\.(.*https?:\/\/[^ ]*).*/\1/g # Mise en colonnes selon le type s/ERROR.* - (http.*)/\1/g s/WARNING: (http.*)/\t\1/g #s/https?:\/\/clone\.domain\.tld/http:\/\/www\.target\.tld/g
Dans cet exemple, la dernière ligne, commentée, permet d'extrapoler sur le site en production (en http) des résultats obtenus par analyse d'une copie clonée (en https) de ce même site.
La conversion se résume à l'application des transformations décrites par ce fichier. Par exemple :
cat result.txt | sed -rf clean2csv.sed > result_cleaned.csv
On pourra se simplifier la vie en encapsulant la ligne de commande dans un script :
#!/bin/bash # This file : mixed_csv_clean.sh base_fichier=${1%%.*} cat $base_fichier.txt | sed -rf clean2csv.sed > "$base_fichier"_cleaned.csv
Il suffit alors de lancer la commande :
$ ./mixed_csv_clean.sh/ result