Date de dernière mise à jour : le 7 novembre 2017 à 17 h 28 min

Forcer le https sur Debian 8

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) :

<VirtualHost *:80>
 ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

<Location /phpsysinfo>
 AuthType Digest
 AuthName "Phpsysinfo"
 AuthDigestDomain /var/www/phpsysinfo/ http://www.exmple.fr/phpsysinfo
 AuthDigestProvider file
 AuthUserFile /etc/apache2/passwords
 Require valid-user
 SetEnv R_ENV "/var/www/phpsysinfo"
 </Location>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
000-default.conf

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 :

<Location />
Redirect / https://XXX.XXX.XXX.XXX/
</Location>

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

<Location />
Redirect / https://www.exemple.fr
</Location>

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

<Location /phpsysinfo>
 AuthType Digest
 AuthName "Phpsysinfo"
 AuthDigestDomain /var/www/phpsysinfo/ http://www.exmple.fr/phpsysinfo
 AuthDigestProvider file
 AuthUserFile /etc/apache2/passwords
 Require valid-user
 SetEnv R_ENV "/var/www/phpsysinfo"
 </Location>

par

<Location /phpsysinfo>
Redirect / https://XXX.XXX.XXX.XXX
</Location>

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.