[SYSADMIN] Passer votre blog en SSL ! Même avec un autre VHOST déjà en SSL.

Aujourd’hui j’ai voulu passer mon blog en SSL. Le problème est que j’avais déjà, sur mon serveur Apache, un site qui utilise un certificat SSL. Il y’a quelques années avoir un certificat SSL était synonyme d’avoir une IP dédiée au site sécurisé par ce biais. J’ai donc entrepris quelques recherches pour voir si les choses avaient évoluées de ce côté. Il semble bien que oui et je vais donc vous expliquer tout cela. Nous allons commencer par voir comment avoir plusieurs VHOSTS en SSL sur Apache avec une seule IP Publique. Ensuite nous nous intéresseront au meilleur moyen d’avoir un certificat reconnu par les différents navigateurs gratuitement. Nous finirons par la configuration de Wordpress en tant que tel.

Plusieurs Virtual Hosts en SSL sur Apache.

A la base, il se trouve que lors de l’arrivée d’une requête sur le serveur Apache en SSL il n’est pas possible de savoir pour quel hôte virtuel elle est adressée. Apache ne peut pas renégocier la communication en SSL après avoir eu connaissance de l’hôte concerné, cela aboutit donc à une erreur ou un avertissement dans le navigateur. Comme il n’est pas possible d’avoir un seul certificat pour tous les hôtes virtuels ou de tout gérer au travers de l’hôte par défaut cela a entraîner un problème de ressources IPs a bon nombre d’hébergeur. La RFC 4366 a étendu le protocole SSL avec le Server Name Indication. Ceci autorise le client a inclure dans sa requête le nom de l’hôte dans son premier message destiné à initier la communication SSL. Cela permet au serveur de diriger la connexion vers le bon hôte virtuel. Avec SNI il est donc possible d’avoir plusieurs hôtes virtuels, avec chacune leur certificat, derrière une seule IP.

Il existe des pré-requis pour utiliser SNI :

  • Avoir OpenSSL 0.9.8f au minimum.
  • Qu’OpenSSL soit compilé avec le support de TLS (par défaut depuis la version 0.9.8k).
  • Qu’Apache soit compilé avec le support d’OpenSSL pour que mod_ssl détecte la possibilité d’utiliser les extensions TLS et supporter SNI.
  • Qu’Apache utilise OpenSSL en runtime.

Les clients compatibles sont :

  • Mozilla Firefox 2.0 et supérieur.
  • Opera 8.0 et supérieur avec TLS 1.1 d’activé.
  • Internet Explorer 7.0 ou supérieur à partir de Windows Vista.
  • Google Chrome.
  • Safari 3.2.1 à partir de Max OS X 10.5.6.

Voici un exemple de configuration Apache :

\# Ensure that Apache listens on port 443
Listen 443

# Listen for virtual host requests on all IP addresses
NameVirtualHost \*:443

# Go ahead and accept connections for these vhosts
# from non-SNI clients
SSLStrictSNIVHostCheck off

<VirtualHost \*:443>
# Because this virtual host is defined first, it will
# be used as the default if the hostname is not received
# in the SSL handshake, e.g. if the browser doesn't support
# SNI.
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

<VirtualHost \*:443>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here

</VirtualHost>

Obtenir un certificat SSL reconnu par les navigateurs et gratuit.

Présentation.

Let’s Encrypt est une Autorité de Certification gratuite, automatisée et ouverte. C’est un service fourni par l'ISRG (Internet Security Research Group). Le but est de permettre a chacun disposant d’un nom de domaine d’obtenir un certificat SSL/TLS pour ce dernier et ce, le plus simplement possible. De grands noms du secteur de l’Internet soutiennent Let’s Encrypt comme OVH, Mozilla, Facebook, Cisco, Automattic, Infomaniak, Akamai ou PlanetHoster. Il existe plusieurs moyens d’obtenir son certificat mais partons du principe que vous disposez d’un accès SSH à votre serveur. (Pour les autres, je vous invite à consulter le site directement). Il existe un client logiciel, nommé Certbot, qui permet d’interagir avec Let’s Encrypt. Le site de Certbot permet de choisir quel logiciel fait tourner votre site puis votre système d’exploitation afin de vous proposer un moyen de l’installer.

Utilisation.

root@www:/home/jeremy# ./certbot-auto certonly -d www.mondomaine.com
```Cette commande va vous proposer différent choix qu'il vous faudra suivre, c'est assez intuitif. Une fois fais vous trouverez les fichiers du certificat dans :```
/etc/letsencrypt/live/www.mondomaine.com
```Vous pourrez donc ajouter les lignes suivantes à votre VHOST SSL :```
SSLCertificateFile /etc/letsencrypt/live/www.mondomaine.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mondomaine.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.mondomaine.com/chain.pem

```Relancer Apache :```
service apache2 restart
```Et c'est tout bon !

Configurons Wordpress.
======================

Vous trouverez milles et un manières pour configurer **Wordpress** en **SSL**. Pour ma part j'ai fais le choix de la simplicité et j'ai confié cette tâche au plugin simple mais efficace [**Really Simple SSL**](https://chezwanders.info/wp-admin/plugin-install.php?tab=plugin-information&plugin=really-simple-ssl&TB_iframe=true&width=600&height=550).
updatedupdated2024-06-012024-06-01