« Onion-Location » permet d’annoncer facilement un site onion aux utilisateurs. Vous pouvez soit configurer un serveur Web pour afficher un en-tête Onion-Location, soit ajouter un attribut HTML <meta> au site Web.

Pour que l'en-tête soit valide, les conditions suivantes doivent être remplies :

  • La valeur Onion-Location doit être une URL valide avec le protocole http: ou https: et un nom d'hôte .onion.
  • La page Web qui définit l’en-tête d’Onion-Location doit être servie par HTTPS.
  • La page Web qui définit l’en-tête d’Onion-Location ne doit pas être un site onion.

Sur cette page, les commandes pour gérer le serveur web sont basées sur des systèmes d'exploitation de type Debian et peuvent différer d'un système à l'autre. Consultez la documentation de votre serveur web et de votre système d'exploitation.

Apache

Pour configurer cet en-tête dans Apache 2.2 ou supérieur, vous devrez activer les modules headers et rewrite et modifier le fichier Virtual Host du site Web.

Étape 1. Activer les en-têtes et les modules de réécriture et recharger Apache2

 $ sudo a2enmod headers rewrite

 $ sudo systemctl reload apache2

Si vous obtenez un message d’erreur, quelque chose s’est mal passé et vous ne pouvez pas continuer avant de trouver ce qui ne fonctionne pas.

Étape 2. Ajoutez l’en-tête d’emplacement onions « Onion-Location » au fichier de configuration d’hôte virtuel

Header set Onion-Location "http://votre-adresse-onion.onion%{REQUEST_URI}s"

votre-adresse-onion.onion est l'adresse du Service Onion que vous souhaitez rediriger et {REQUEST_URI} est le composant de chemin de l'URI demandé, comme "/index.html".

Exemple d'un Virtual Host :

     <VirtualHost *:443>
       ServerName <your-website.tld>
       DocumentRoot /path/to/htdocs

       Header set Onion-Location "http://votre-adresse-onion.onion%{REQUEST_URI}s"

       SSLEngine on
       SSLCertificateFile "/path/to/www.example.com.cert"
       SSLCertificateKeyFile "/path/to/www.example.com.key"
     </VirtualHost>

Étape 3. Recharger Apache

Rechargez le service apache2 pour que vos modifications de configuration prennent effet :

 $ sudo systemctl reload apache2 

Si vous obtenez un message d’erreur, quelque chose s’est mal passé et vous ne pouvez pas continuer avant de trouver ce qui ne fonctionne pas.

Étape 4. Tester votre Onion-Location

Pour tester si Onion-Location fonctionne, récupérez les en-têtes HTTP du site web, par exemple :

 $ wget --server-response --spider your-website.tld

Recherchez l'entrée onion-location et l'adresse du Service onion. Ou ouvrez le site web dans le navigateur Tor et une pilule violette apparaîtra dans la barre d'adresse.

Nginx

Pour configurer un en-tête Onion-Location, l'opérateur de service doit d'abord configurer un service Onion.

Etape 1. Créez un service Onion en mettant ce qui suit dans torrc :

HiddenServiceDir /var/lib/tor/hs-my-website/
HiddenServiceVersion 3
HiddenServicePort 80 unix:/var/run/tor-hs-my-website.sock

Étape 2. Modifier le fichier de configuration du site web

Dans /etc/nginx/conf.d/<votre-site-web>.conf ajoutez l'en-tête Onion-Location et l'adresse du service Onion. Par exemple :

    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

Le fichier de configuration qui comprend l’Onion-Location devrait ressembler à ceci :

server {
    listen 80;
    listen [::]:80;

    server_name <your-website.tld>;

    location / {
       return 301 https://$host$request_uri;
    }

}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name <your-website.tld>;

    # managed by Certbot - https://certbot.eff.org/
    ssl_certificate /etc/letsencrypt/live/<hostname>/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/<hostname>/privkey.pem;

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

    # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    access_log /var/log/nginx/<hostname>-access.log;

    index index.html;
    root /path/to/htdocs;

    location / {
            try_files $uri $uri/ =404;
    }
}

server {
        listen unix:/var/run/tor-hs-my-website.sock;

        server_name <your-onion-address>.onion;

        access_log /var/log/nginx/hs-my-website.log;

        index index.html;
        root /path/to/htdocs;
}

Étape 3. Tester la configuration du site web

 $ sudo nginx -t

Le serveur Web doit confirmer que la nouvelle syntaxe fonctionne :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Étape 4. Redémarrer nginx

 $ sudo nginx -s reload

Si vous obtenez un message d’erreur, quelque chose s’est mal passé et vous ne pouvez pas continuer avant de trouver ce qui ne fonctionne pas.

Étape 5. Tester votre Onion-Location

Pour tester si Onion-Location fonctionne, récupérez les en-têtes HTTP du site web, par exemple :

 $ wget --server-response --spider your-website.tld

Recherchez l'entrée onion-location et l'adresse du Service onion. Ou ouvrez le site web dans le navigateur Tor et une pilule violette apparaîtra dans la barre d'adresse.

Caddy

Caddy propose HTTPS automatique par défaut, il provisionne donc votre certificat TLS et s'occupe de la redirection HTTP vers HTTPS pour vous. Pour inclure un en-tête d’Onion-Location si vous utilisez Caddy 2, ajoutez la déclaration suivante à votre fichier Caddyfile :

header Onion-Location http://<your-onion-address>.onion{path}

Si vous utilisez un site statique et que l'adresse onion se trouve dans la variable d'environnement $TOR_HOSTNAME, votre fichier Caddy ressemblera à ceci :

your-website.tld

header Onion-Location http://{$TOR_HOSTNAME}{path}
root * /var/www
file_server

Tester la solution: Tester la solution avec :

 $ wget --server-response --spider your-website.tld

Recherchez l'entrée onion-location et l'adresse du Service onion. Ou ouvrez le site Web dans le Navigateur Tor et une pastille violette apparaîtra dans la barre d'adresse.

Utilisation d'un attribut HTML <meta>

Le comportement identique de l’Onion-Location comprend l’option de le définir en tant qu’attribut HTML <meta> http-equiv. Elle peut être utilisée par les sites web qui préfèrent (ou doivent) définir un Onion-Location en modifiant le contenu HTML servi au lieu d'ajouter un nouvel en-tête HTTP. L'en-tête Onion-Location équivaudrait à un <meta http-equiv="onion-location" content="http://<your-onion-service-address>.onion" /> ajouté dans l'élément d'en-tête HTML de la page Web. Remplacez <your-onion-service-address.onion> par le Service Onion que vous souhaitez rediriger.

Limites

HTML ne peut pas lire l'URL demandée et l'insérer dynamiquement dans la balise http-equiv <meta>. C'est pourquoi les visiteurs sont toujours redirigés vers l'URL .onion spécifiée dans la partie contenu de la balise méta, quelle que soit la sous-page sur laquelle ils se trouvent.

Par conséquent, si possible, nous vous recommandons d'utiliser l'une des méthodes ci-dessus.

Plus de précisions

Consultez les spécifications de l’Onion-Location (page en anglais).