Auteur : Didier Misson
• 6 février 2009

Vous gérez un superbe (évidemment) site e-commerce, ou un Webmail ou un accès phpMyAdmin où vous (ou vos visiteurs) entrez des données confidentielles ou simplement votre mot de passe. Ce serait quand même plus prudent que ces données ou ce mot de passe ne circule pas en clair sur le Net…

apache_httpd_logo

C’est évidemment possible. Apache (par exemple) peut chiffrer les communications. Mais pour cela, vos visiteurs doivent accéder à votre site en tapant « https« , ce qu’ils ne font pas toujours !

Comment forcer l’utilisation de « https » au lieu de http » ?

Mais avec un fichier « .htaccess » bien sur ! ;-)

Les documentations sont nombreuses sur le Net, et beaucoup se basent sur un test du port 80 ou 443 pour forcer le basculement en SSL (https).

RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

Cela fonctionne mais ce n’est pas le plus universel car on peut avoir des sites au quel on accède par des ports non standards.

Une solution ne contenant pas l’URL du site dans le fichier .htaccess est plus facile à mettre en place : il suffit de copier le bon .htacces dans n’importe quel dossier de votre site pour que cela fonctionne sans devoir l’adapter d’un site à l’autre ;-)

Je me suis basé sur ce billet de Joseph Scott, solution améliorée par Nicolas Echaniz.

Cette solution vérifie directement si le SSL est activé, sans avoir besoin de vérifier le port utilisé (qui peut être différent de 80).

Copiez ces 3 lignes dans un fichier .htaccess dans le dossier où vous voulez forcer le https. Par exemple :

vi /var/www/monsite.be/webmail/.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Sauvez le fichier.

Je suppose que vous aviez déjà modifié le fichier de définition de votre site dans « /etc/apache2/sites-available/monsite.be » pour y inclure les lignes nécessaires au https (ce n’est pas l’objet de cet article).

Vérifiez s’il n’y a pas d’erreur  et ensuite rechargez la configuration d’Apache2 :

# apache2 -t
Syntax OK

# /etc/init.d/apache2 reload
Reloading web server config...26580

Voilà, il vous reste à essayer en tapant l’URL de votre site en http. La redirection vers https devrait être automatique. ;-)

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Identi.ca
  • MySpace
  • Netvibes
  • Technorati
  • Twitter
  • email
  • Wikio FR
  • LinkedIn
  • RSS
  • Add to favorites
Catégorie: Serveurs | Tags : , ,
Vous pouvez suivre toutes les réponses à à ce billet via le flux RSS 2.0. Vous pouvez laisser une réponse, ou un rétrolien depuis votre propre site.

3 réponses

  1. Ce qui pourrait être intéressant également serait de rediriger vers https dès qu’on visite une page de login, telle que login.php, wp-login.php (pour Wordpress) ou si l’URL contient le mot login (cas de Gallery2)

    On n’a pas toujours besoin de sortir l’artillerie SSL lourde à chaque connection.

    Là-dessus, je vais potasser la doc d’Apache… :-)

  2. Bon, ben j’ai trouvé ca pour Gallery2: http://gallery.menalto.com/node/30558 Le dernier post par Topquark marche très bien.

    Pour wordpress, on peut mettre define(‘FORCE_SSL_ADMIN’, true); dans le fichier wp-config.php

    Dans le pire des cas, j’avais pondu ça:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} (login+) [NC]
    RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]

  3. Mouais… J’aurais dû lire la doc de wordpress jusqu’au bout: http://codex.wordpress.org/Administration_Over_SSL

Laisser un commentaire