Présentation
Un service caché Tor expose une adresse .onion qui provient directement d’une clé publique. Aucun certificat d’autorité, aucun DNS et aucune adresse IP publique ne sont révélés. Le trafic est chiffré de bout en bout par le réseau Tor, qui le relaie à travers des milliers de nœuds volontaires. Cette architecture empêche toute corrélation entre l’identité du serveur et les requêtes entrantes.
Configuration du service caché
Le fichier /etc/tor/torrc doit contenir les directives suivantes :
HiddenServiceDir /var/lib/tor/blog/
HiddenServicePort 80 127.0.0.1:8080
Le répertoire indiqué doit appartenir à l’utilisateur debian-tor avec les permissions 700. Tor y stocke la clé privée du service et le fichier hostname contenant l’adresse .onion. Après modification, le service est relancé :
sudo systemctl restart tor@default
sudo cat /var/lib/tor/blog/hostname
La sortie montre une chaîne alphanumérique longue, par exemple dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion. Cette adresse est la seule référence publique du serveur.
Intégration du serveur web
Le serveur web écoute uniquement sur l’interface locale 127.0.0.1:8080. Un bloc nginx typique ressemble à :
server {
listen 127.0.0.1:8080;
server_name dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion;
root /srv/tor.david.alvarezrosa.com;
index index.html;
error_page 404 /404/index.html;
location / {
try_files $uri $uri/ =404;
}
}
Tor transmet les requêtes HTTP vers ce port, ce qui élimine le besoin de TLS, HTTP/2 ou QUIC : le chiffrement est déjà assuré par le circuit Tor. Le serveur ne doit donc pas gérer de certificats, ce qui simplifie la configuration.
Déploiement automatisé
Le site statique est généré avec Hugo. Pour que les liens absolus pointent vers l’adresse .onion, la commande suivante est exécutée :
hugo --minify --baseURL="http://dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion/"
Un workflow GitHub Actions construit deux cibles : la version clearnet et la version Tor. Chaque artefact est synchronisé avec rsync vers le répertoire web correspondant. Cette double construction garantit que les deux sites restent identiques sans intervention manuelle, tout en respectant les contraintes d’URL propres à chaque environnement.