Plusieurs domaines en https sur la même ip avec apache, c’est possible via le SNI.

Vous souhaitez configurer vos sites internet en SSL mais votre serveur ne possède pas plusieurs ip.

Il est maintenant possible de faire du vhost en SSL via apache2.

Note importante !

Cette article est d’actualité si vous utilisez apache 2.2, la version 2.4 ne nécessitent plus la directive NameVirtualHost (le fonctionnement réseau du SNI reste identique)

Adapter sa configuration pour apache 2.4 (debian 8)

sni-header

Pourquoi ça n’était pas possible ?

Le protocole https, c’est le protocole http + une couche de TLS qui l’encapsule. Quand votre serveur web reçoit le paquet réseau, celui-ci est chiffré. Il ne peut donc pas décoder l’entête « Host » qui indiquera sur quelle vhost la requête arrivera.

Le déchiffrage du paquet HTTP s’opère après la transmission du certificat par le serveur vers le client. (donc, sans infos, il transmettrait un certificat invalide et votre navigateur afficherait un message d’erreur).

Quelle solution du coup ?

Pour palier à ce souci, le protocol TLS intègre le SNI (Server Name Indication) dans le paquet « client hello » qui a pour effet de transmettre le nom du site web visité lors du premier échange serveur / client (et ce, avant de déchiffrer le HTTPS).

Capture Wireshark montrant le paquet Client Hello d’une liaison TLS 1.2 avec le SNI

sni

 

En pratique, comment on active ça sur apache ?

Nb: dans mon cas, je me trouve sur apache2.2.22 avec une debian 7

Il faut éditer le fichier /etc/apache2/ports.conf et ajouter la ligne suivante dans les balises qui charge le module ssl. (en dessous de Listen 443)

NameVirtualHost *:443

Au final, votre fichier devrait ressembler à ceci :

ServerName localhost
NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
NameVirtualHost *:443
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
NameVirtualHost *:443
Listen 443
</IfModule>

C’est cette ligne qui activera la prise en charge du SNI.

Maintenant, il vous suffit de créer vos vhosts normalement et de préciser la directive ServerName comme en HTTP classique.

Note sur la compatibilité

Certains vieux navigateurs ne prennent pas en charge cette fonctionnalité. Si vous avez encore des clients naviguant avec de vieux navigateurs, il est possible qu’il ne puisse plus accéder à votre site web. (ie sous win xp ou encore android 1.X et 2.X).

Conclusion

Un article complet sur le ssl avec apache, cela vous intéresse ?

Astuce : Vous souhaitez tester si votre config ssl est correcte et à jour (d’un point de vue des protocoles deprecated), je vous conseille le site suivant (merci @willubuntu)

https://www.ssllabs.com/ssltest/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *