Forcer le https sur Debian

On voir comment forcer un site ou une interface web à utiliser le https. Dans cet article je vais partir du principe que vous avez déjà un certificat ssl (voir ici pour voir comment créer un certificat SSL avec Let’s Encrypt).

Forcer le https sur les accès via l’adresse ip du serveur

Pour forcer le https, on va modifier le fichier de configuration principal apache.

Allez dans le répertoire /etc/apache2/sites-enabled/ et ouvrez le fichier 000-default.conf.

Voici à quoi ressemble mon fichier 000-default.conf sous Debian 8 (j’ai repris le fichier avec l’exemple de phpsysinfo) :

[pastacode lang=”apacheconf” message=”000-default.conf” highlight=”” provider=”manual” manual=”%3CVirtualHost%20*%3A80%3E%0A%20ServerAdmin%20webmaster%40localhost%0A%0ADocumentRoot%20%2Fvar%2Fwww%0A%3CDirectory%20%2F%3E%0AOptions%20FollowSymLinks%0AAllowOverride%20None%0A%3C%2FDirectory%3E%0A%3CDirectory%20%2Fvar%2Fwww%2F%3E%0AOptions%20Indexes%20FollowSymLinks%20MultiViews%0AAllowOverride%20All%0AOrder%20allow%2Cdeny%0Aallow%20from%20all%0A%3C%2FDirectory%3E%0A%0AScriptAlias%20%2Fcgi-bin%2F%20%2Fusr%2Flib%2Fcgi-bin%2F%0A%3CDirectory%20%22%2Fusr%2Flib%2Fcgi-bin%22%3E%0AAllowOverride%20None%0AOptions%20%2BExecCGI%20-MultiViews%20%2BSymLinksIfOwnerMatch%0AOrder%20allow%2Cdeny%0AAllow%20from%20all%0A%3C%2FDirectory%3E%0A%0A%3CLocation%20%2Fphpsysinfo%3E%0A%20AuthType%20Digest%0A%20AuthName%20%22Phpsysinfo%22%0A%20AuthDigestDomain%20%2Fvar%2Fwww%2Fphpsysinfo%2F%20http%3A%2F%2Fwww.exmple.fr%2Fphpsysinfo%0A%20AuthDigestProvider%20file%0A%20AuthUserFile%20%2Fetc%2Fapache2%2Fpasswords%0A%20Require%20valid-user%0A%20SetEnv%20R_ENV%20%22%2Fvar%2Fwww%2Fphpsysinfo%22%0A%20%3C%2FLocation%3E%0A%0AErrorLog%20%24%7BAPACHE_LOG_DIR%7D%2Ferror.log%0A%0A%23%20Possible%20values%20include%3A%20debug%2C%20info%2C%20notice%2C%20warn%2C%20error%2C%20crit%2C%0A%23%20alert%2C%20emerg.%0ALogLevel%20warn%0A%0ACustomLog%20%24%7BAPACHE_LOG_DIR%7D%2Faccess.log%20combined%0A%3C%2FVirtualHost%3E”/]

Ce fichier de configuration gère tous les sites (au sens large) auxquels vous accédez en rentrant l’adresse ip de votre serveur en http. Par exemple un webmail auquel vous accédez avec l’adresse http://XXX.XXX.XXX.XXX/webmail.

Si vous voulez rediriger tous les sites auxquels vous accédez via l’adresse ip du serveur en https, il vous suffit de rajouter :

[pastacode lang=”apacheconf” message=”” highlight=”” provider=”manual” manual=”%3CLocation%20%2F%3E%0ARedirect%20%2F%20https%3A%2F%2FXXX.XXX.XXX.XXX%2F%0A%3C%2FLocation%3E”/]

Forcer le https sur les accès via un nom de domaine

Comme beaucoup de monde, j’ai un fichier de config Apache dédié pour le nom de domaine memodugeek.info, les modifications sur le fichier 000-default.conf n’impacte donc pas les accès via memodugeek.info. Donc si je modifie ce fichier, ça ne va pas me forcer le https quand j’accède au site http://www.memodugeek.info.
Si vous avez un site avec un nom de domaine, il y a de forte chance que vous ayez également un fichier de configuration dédié à ce nom de domaine avec dedans un virtual host sur le port 80 (http) et un second sur le port 443 (https).

Il vous suffit donc d’utiliser la même méthode en mettant une redirection dans le virtual host http comme ci-dessous

[pastacode lang=”apacheconf” message=”” highlight=”” provider=”manual” manual=”%3CLocation%20%2F%3E%0ARedirect%20%2F%20https%3A%2F%2Fwww.exemple.fr%0A%3C%2FLocation%3E”/]

Forcer le https sur certaines adresses seulement

Si vous ne voulez pas forcer le https partout mais que sur une interface web protégée par exemple, il vous suffit de remplacer la partie qui gère la protection

[pastacode lang=”apacheconf” message=”” highlight=”” provider=”manual” manual=”%3CLocation%20%2Fphpsysinfo%3E%0A%20AuthType%20Digest%0A%20AuthName%20%22Phpsysinfo%22%0A%20AuthDigestDomain%20%2Fvar%2Fwww%2Fphpsysinfo%2F%20http%3A%2F%2Fwww.exmple.fr%2Fphpsysinfo%0A%20AuthDigestProvider%20file%0A%20AuthUserFile%20%2Fetc%2Fapache2%2Fpasswords%0A%20Require%20valid-user%0A%20SetEnv%20R_ENV%20%22%2Fvar%2Fwww%2Fphpsysinfo%22%0A%20%3C%2FLocation%3E”/]

par

[pastacode lang=”apacheconf” message=”” highlight=”” provider=”manual” manual=”%3CLocation%20%2Fphpsysinfo%3E%0ARedirect%20%2F%20https%3A%2F%2FXXX.XXX.XXX.XXX%0A%3C%2FLocation%3E”/]

et de mettre la partie qui gère la protection dans le fichier 000-default-ssl.conf (l’équivalent du fichier 000-default.conf mais pour le https) vu que la protection par mot de passe devra se faire sur l’adresse en https et non plus sur l’adresse en http qui sera obligatoirement redirigée vers le https.
Si vous laissez la partie qui gère la protection sur les deux fichiers (default et default-ssl), quand vous accéderez à votre site/interface web en http, on vous demandera un mot de passe et après vous être authentifiés vous serez redirigés vers l’adresse https où l’on vous redemandera de vous authentifier.

Si vous voulez forcer en https une interface web ou un site sans protection par mot de passe, il n’y a rien à ajouter dans le fichier default-ssl.conf.

Si l’interface web protégée que vous souhaitez forcer en https est accessible via un nom de domaine, dans le fichier de config de votre nom de domaine vous devez déplacer la partie qui gère la protection dans le vhost du port 443 et mettre la redirection https dans le vhost du port 80.

Le prochain article sera surement consacré à la configuration d’un site en https.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.