Bien, je me suis décidé à basculer mes sites internet en HTTPS et la route fut longueeeeeeeeeeeeee !
En effet, la configuration, du certificat en particulier, n’à pas était évidente 😡
Car pour avoir un site web fonctionnel sans exception de sécurité, gros message faisant bien peur au visiteur d’un site, cela passe par l’obtention d’un certificat SSL.
Le gros soucis avec le certificat SSL, c’est que c’est un service payant, assez onéreux …
Pour autant, on à de la chance, car grâce à un projet opensource, il est dorénavant possible de faire la certification gratuitement, rien que ça ! 😀
Alors bon, cool, c’est gratuit, mais pour autant ce n’est pas super simple, et il faut renouveler le certificat très régulièrement, et savoir bidouiller un minimum sur son serveur dédié.
Attention, la gratuité concerne des certificats de classe 1, fonctionnel de manière basique (non wilcard), suffisant dans la grande majorité des cas.
Donc si vous aussi vous avez envie de franchir le pas et que vous êtes prêt à vous lancer dans cette petite aventure, suivez le guide !
Les prérequis sont simple, avoir un serveur Apache fonctionnel et un accès root à son serveur dédié.
Passons directement à l’étape de configuration de notre serveur web.
1 > Activer le plugin et protocol SSL et le sécuriser.
Pour ce qui est de l’activation du plugin SSL, c’est de la rigolade, celui ci étant prévu nativement et dispo sur toutes les distributions linux, il ce résume donc en 2 commandes.
Activer / Installer le plugin
sudo a2enmod ssl
Valider l’installation en relançant le serveur Apache.
sudo service apache2 force-reload
Par contre il y à quelques optimisation à suivre afin de sécuriser au mieux le protocol SSL sur votre serveur web. En effet, vous pouvez zapper cette étape, le fonctionnement ne sera pas bloqué, mais lors de tests finaux, sur des sites certificateurs, ou des protocoles de vérifications sécuritaire, il vous sera très clairement indiqué certaines failles de sécurité. Vous pouvez consulter cet article qui traite plus exactement de la configuration et de l’optimisation SSL. http:// à venir |
Pour valider, n’oubliez pas de relancer votre serveur apache pour qu’il prenne en compte vos réglages.
/etc/init.d/apache2 restart
2 > Générer un certificat SSL valide avec LetsEncrypt.
Une fois la configuration Apache faite, il faut générer le certificat SSL, et c’est là le nerf de la guerre !
En effet, si vous générez un certificat SSL classique, tel qu’avec OpenSSL par exemple, vous aurez activée une connexion sécurisée, cependant ce certificat ne sera pas connu comme valide par les navigateurs !
Pour les visiteurs d’un site web, ça fait tâche, et vous risquez de perdre bien facilement 90% de votre audience 😡
Sans parler du fait que le référencement d’un site HTTPS est dorénavant avantagé.
Donc il est super important de générer un certificat SSL valide pour pouvoir utiliser pleinement le protocole HTTPS sans soucis.
Bon alors là quand on commence à ce renseigner sur les solutions permettant d’avoir un certificat SSL valide, c’est là qu’on prend peur au vue des tarifs élevés …
En effet il faut compter généralement dans les 50 à 70€ pour une prestation de certificat basique de classe 1, valable 1 an, et la note explose pour des certificats de classe supérieure ou en wilcard (valide sur tous les sous domaines).
Alors voyons voir comment LetsEncrypt nous sauve la mise avec une génération gratuite et valide sur la majorité des navigateurs web :
On commence par télécharger le script sur le dédié (je vous laisse installer git et ces prérequis si nécessaire) et on l’installe dans notre répertoire /opt
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
On ce rend ensuite dans le dossier nouvellement créé
cd /opt/letsencrypt
Puis on lance la commande permettant de générer le certificat
./letsencrypt-auto certonly --webroot -w /emplacement/de/mon/dossier/web -d nomdedomaine.fr -d www.nomdedomaine.fr
Si on veut augmenter la sécurité de la clef en encodant en 4096 bits plutôt qu’en 2048 par défaut on peut rajouter la commande finale de cette manière
./letsencrypt-auto certonly --webroot -w /emplacement/de/mon/dossier/web -d nomdedomaine.fr -d www.nomdedomaine.fr -rsa-key-size 4096
Au besoin voici un résultat listant toutes les options possible sur letsencrypt :
./letsencrypt-auto --help
Avant de conclure ce point, on va aussi penser à mettre en place une petite tâche planifiée afin de renouveler automatiquement le certificat tout les 3 mois
./letsencrypt-auto renew certonly --webroot -w /emplacement/de/mon/dossier/web -d nomdedomaine.fr -d www.nomdedomaine.fr -rsa-key-size 4096
Voilouuu 😀
On en à fini concernant la configuration du certificat avec LetsEncrypt.
Notre certificat tout beau tout propre devrait fonctionner parfaitement.
3 > Configurer les vhosts / nom de domaine pour fonctionner en SSL.
Maintenant qu’on à mis en place nos certificats, il faut régler nos virtuals hosts pour qu’ils prennent en compte ceux ci.
On va donc ce tourner sur les vhosts qui nous intéressent pour rajouter les arguments suivants en adaptant à votre configuration :
SSLEngine on SSLCertificateFile /etc/letsencrypt/live/nomdedomaine.fr/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/nomdedomaine.fr/privekey.pem SSLCertificateKeyFile /etc/letsencrypt/live/nomdedomaine.fr/chain.pem
Au passage on peut aussi optimiser en basculant nos précédents vhosts classique (port 80) vers notre vhost “secure”.
Pour ce faire, il suffit de remplacer le contenu des vhosts ciblés, par une simple ligne :
<VirtualHost nomdedomaine.fr:80> Redirect permanent / https://www.nomdedomaine.fr </VirtualHost>
Tant qu’à faire je vous glisse ici une configuration propre de vhost compatible avec tout ces réglages mentionnés :
<VirtualHost nomdedomaine.fr:80> ServerName nomdedomaine.fr ServerAlias www.nomdedomaine.fr:80 Redirect permanent / https://www.nomdedomaine.fr/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost nomdedomaine.fr:443> ServerName nomdedomaine.fr ServerAlias nomdedomaine.fr www.nomdedomaine.fr ServerAdmin admin@nomdedomaine.fr DocumentRoot /emplacement/de/mon/dossier/web/ <Directory /emplacement/de/mon/dossier/web/> 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> ErrorLog /emplacement/de/mon/dossier/logs/ssl-nomdedomaine-error.log LogLevel warn CustomLog /emplacement/de/mon/dossier/logs/ssl-nomdedomaine-access.log combined SSLEngine on SSLCertificateFile /etc/letsencrypt/live/nomdedomaine.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/nomdedomaine.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/nomdedomaine.fr/chain.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Maintenant il ne reste plus qu’à valider le réglage sur apache, par un redémarrage
/etc/init.d/apache2 restart
Et le tour est joué !
Tadam, petit cadena vert 😀
N’hésitez pas à commenter si vous avez des erreurs, des questions 😉