Tous les jours, vous entendez parler de sites piratés, de données espionnées sur les réseaux, de mots de passe volés. La sécurité est devenue un aspect inévitable de la gestion d'un site, quelles que soient sa taille ou son audience.
Il existe un certain nombre de techniques permettant de protéger votre site (la première étant la mise à jour régulière). Aujourd'hui, je vous présente l'une d'entre d'elles, SSL.
Description du protocole SSL
Le protocole SSL sert à faire passer une connexion réseau dans un canal sécurisé. Il est souvent associé à HTTP pour former le protocole HTTPS, utilisé pour sécuriser l'accès à un site web.
SSL a trois buts spécifiques:
- s'assurer que l'on communique bien avec le serveur indiqué (authentification)
- empêcher quiconque d'observer les données échangées (confidentialité)
- détecter la modification des données entre le client et le serveur (intégrité)
SSL sert donc principalement à se protéger des attaques man in the middle (lorsque quelqu'un se place entre le navigateur et le serveur). Ce type d'attaque est assez facile à monter sur des réseaux WiFi, ou des réseaux publics (conférences, Starbucks, etc). Ce protocole ne vous protègera pas de vulnérabilités comme XSS ou les injections SQL.
De nombreux sites n'intègrent pas SSL, généralement pour deux raisons: un certificat SSL coûte cher, et les connexions sécurisées sont lentes. De nos jours, les progrès des logiciels et algorithmes ont rendu les connexions très rapides et moins coûteuses en processeur. Et je vais vous présenter une méthode gratuite pour obtenir un certificat, et sécuriser ainsi vos pages d'administration.
Protégez l'administration de WordPress
Prérequis
Mise en situation: vous désirez sécuriser la partie admin de votre site, mais le reste du site n'est pas critique, vos visiteurs peuvent consulter le site sans avoir besoin d'un haut niveau de sécurité.
- Vous avez accès à une ligne de commande Mac OS ou Linux.
- OpenSSL est installé sur la machine sur laquelle vous effectuez les modifications.
- Vous pouvez modifier les virtual hosts de votre server Apache.
Création du certificat SSL
Nous allons tout d'abord créer le certificat SSL qui authentifiera votre connexion. Ces certificats sont généralement achetés auprès d'une autorité de certification, qui vous fournira (contre 100 à 500$ par an) un certificat reconnu par la plupart des navigateurs. Ici, vous n'avez pas besoin d'une autorité de certification, car peu d'utilisateurs auront accès à la partie admin de votre site. Vous pouvez donc générer votre certificat gratuitement!
Créez une clef RSA pour votre serveur:
Il est recommandé (pour le moment) d'utiliser des clefs de 2048 bits, qui sont assez solides.
Ouvrez une ligne de commande, et tapez la commande en gras pour créer une certificate signing request:
Pour un site, seul le Common Name est important. Il doit correspondre exactement au nom de domaine de votre site.
Signez cette CSR avec votre clef pour créer le certificat:
Voilà, vous avez un certificat utilisable pour votre site.
Copiez le certificat (server.crt) ainsi que la clef (server.key) dans un dossier pour Apache:
Configuration de WordPress
En vous basant sur le codex WordPress, ajoutez une directive à votre wp-config.php:
(à placer avant la directive "require_once(ABSPATH . 'wp-settings.php');")
l'option FORCE_SSL_LOGIN n'est pas assez sécurisée car seule l'URL du formulaire de login est en HTTPS. La page de login elle-même ne sera pas servie par SSL.
De plus, FORCE_SSL_ADMIN active le secure flag des cookies de session, qui ne seront donc envoyés que par une connexion sécurisée (ne vous étonnez donc pas si vous n'êtes plus connecté en accédant au site par HTTP).
Configuration d'Apache
Activez maintenant SSL dans Apache:
Voici le contenu de la configuration Apache à ajouter
On crée deux virtual hosts quasiment identiques, l'un pour la connexion normale, non sécurisée, et l'autre pour la connexion par SSL.
La version non sécurisée comporte des redirections vers la version sécurisée pour wp-login.php et wp-admin. Ces directives sont redondantes avec FORCE_SSL_ADMIN, qui se charge directement des redirections, mais la gestion de SSL étant plutôt le rôle d'Apache, on se prémunit d'éventuelles surprises erreurs de configuration de WordPress.
La version sécurisée contient les directives activant SSL, ainsi que trois autres commandes:
- l'une pour désactiver SSLv2 (vieille version du protocole qui n'est plus recommandée actuellement). Si vous ne vous connectez qu'avec Firefox, Opera ou Internet Explorer (>8) vous pouvez ajouter "-SSLv3" pour n'utiliser que TLSv1, la version la plus récente du protocole (qui n'est toujours pas supportée par Chrome).
- la seconde commande force le client (navigateur) à utiliser l'algorithme que le serveur lui indique(par défaut, c'est le client qui choisit, et souvent, il choisit un algorithme faible).
- la dernière commande sélectionne une suite d'algorithmes suffisamment fiable pour le moment.
Relancez Apache:
Configuration du navigateur
Allez sur votre page de login, et vous verrez l'avertissement classique de certificat non reconnu. Acceptez définitivement le certificat (c'est le votre, vous venez de le créer, vous lui faites donc confiance). Vous devrez accepter le certificat sur chaque navigateur que vous utiliserez pour administrer votre site.
Si un jour, en vous connectant, l'avertissement s'affiche à nouveau, attention! Cela signifie que le serveur présente un autre certificat que celui que vous avez choisi, et qu'il y a soit un problème de configuration, soit une personne/machine qui trafique votre connexion. Évitez alors de vous connecter à votre site. Et éventuellement, déconnectez-vous complètement du réseau, car un attaquant ne visera pas que la connexion à votre blog, mais aussi celles vers tout autre site.
11 Commentaires
Bravo Géo pour cet article complet et technique sur l'installation de SSL pour l'administration de WordPress.
Seul élément dommage, cela ne peut s'appliquer sur un grand nombre d'hébergement mutualisés... :(
On peut changer la cipher suite dans un htaccess, mais pas le reste (il faut absolument avoir accès aux virtual hosts pour faire du SSL).
Ha, si c'est du Couprie, c'est du bon !
Article bien complet, même si j'aurais aimé voir des explications sur les mutu justement, car beaucoup de personnes sont en mutu.
Mais ça devient un peu plus "custom", ton article est très bon, j'ai appris des choses :)
Bonne journée !
En gros, pour un mutualisé, l'hébergeur gère lui-même les virtual hosts, donc soit on a un hébergeur sympa qui permet de créer un second vhost sur le port 443 avec le certificat et la clef qu'on veut (j'en connais pas pour le moment), soit on fonctionne comme wordpress.com: ils ont pris un certificat wildcard pour *.wordpress.com, c'est-à-dire un certificat qui fonctionne pour tous les sous-domaines de wordpress.com, et ils redirigent sur le sous-domaine quand quelqu'un veut administrer son site.
Personnellement je suis sur un mutualisé ovh et le certificat est inclus dans mon offre
comme indiqué dans le billet , celui-ci n'est pas certifié mais il suffit pour sécuriser les connexions comme les visiteurs n'ont pas accès
Bon post en tout cas (surtout pour ceux qui doivent configurer tout à la main)
Je commente juste pour la pub tendancieuse en haut de l'article... ;-)
@Pierre : la publicité dépend beaucoup de l'historique et des cookies de l'ordinateur. Chez moi, elle affiche une pub pour PowerBoutique (ce qui s'éloigne un peu je l'accorde de WordPress et de SSL...).
Super article (comme souvent), merci !
Bonjour et merci pour cet article...
J'ai malgré tout une question toute bête. J'ai déjà sur mon serveur un owncloud qui tourne sur le port 443, est-il possible d'utiliser un autre port pour sécuriser l'admin de WordPress ?
Oui, c'est tout à fait possible: remplacez 443 dans "VirtualHost *:443" par le port que vous voulez dans la configuration ci-dessus, et vous pourrez accéder à votre site à l'adresse "https://votredomaine.com:votreport".
et avec un hébergement mutualisé, comment cela se passe ? J'ai le cas avec 1&1, j'essaye de lier le certificat SSL avec le https mais très très difficilement, mon dieu... la difficulté quoi ! rien ne fonctionne... aucune explication sérieuse.
Avez-vous une idée ?
Laisser un commentaire