Ubuntu - Sécuriser son serveur web Apache (en HTTPS) grâce à SSL

Page 1 / 1
  • Publié le : 13 février 2014 à 20:47
  • Par Lionel Eppe

Si vous utilisez le serveur web Apache pour faire fonctionner un site web d'e-commerce, un client d'e-mails, ... Nous vous recommandons de chiffrer la connexion à ce genre de service gràce à l'installation d'un certificat SSL sur votre serveur. Pour cela, nous allons vous montrer comment générer des certificats SSL (gratuitement ou de manière plus professionnel en payant celui-ci) et configurer Apache pour qu'il puisse fonctionner via son protocole HTTPS (port 443).

  1. Mise à jour de la liste des paquets
  2. Création des clés pour la demande de signature du certificat
  3. Auto-signer son certificat
  4. Faire signer son certificat par une autorité reconnue
  5. Sécurisation du serveur web Apache
  6. Test de la configuration

1. Mise à jour de la liste des paquets

Avant de commencer, il est recommandé de mettre à jour la liste des paquets disponibles dans les dépôts officiels d'Ubuntu car cela vous permettra de récupérer la dernière version d'OpenSSL.

Code : Bash

apt-get update

 

2. Création des clés pour la demande de signature du certificat

Pour créer nos clés privées sécurisées et non sécurisées, nous allons utiliser le programme "openssl".
Pour cela, tapez la commande suivante pour l'installer (si ce n'est pas déjà fait).

Code : Bash

apt-get install openssl

Ensuite, créez un dossier "ssl" dans le dossier d'apache.

Code : Bash

mkdir /etc/apache2/ssl
cd /etc/apache2/ssl

Commencez par créer la clé privée sécurisée.

Note :
- Si vous souhaitez faire signer votre certificat par une autorité reconnue, vous devrez peut-être choisir une autre valeur que 2048 bits.
Néanmoins, Geotrust demande maintenant des certificats en 2048 bits.
- Dans le cas d'un certificat auto-signé, utilisez une valeur plus grande car cela améliorera la sécurisation de la connexion. Par exemple : 4096.

Code : Bash

openssl genrsa -des3 -out server.key 2048

Créez ensuite une clé privée non sécurisée.

Code : Bash

openssl rsa -in server.key -out server.key.insecure

Renommez ensuite les clés obtenues.

Code : Bash

mv server.key server.key.secure
mv server.key.insecure server.key

Puis, créez la demande de certificat.
Note :
Plusieurs informations vous serons demandées mais la plus importante est le "Common Name (e.g. server FQDN or YOUR name)".
En effet, vous devrez y indiquer votre nom de domaine ou le sous-domaine pour lequel le certificat sera valable. Si vous souhaitez que votre certificat fonctionne sur tous les sous-domaines de votre domaine, indiquez simplement "*.votre-domaine.com".
Attention : Le caractère * peut ne pas être accepté par certaines autorités ou être plus cher qu'un certificat classique. Néanmoins, dans le cas d'un certificat auto-signé vous pourrez le faire sans problèmes.

Code : Bash

openssl req -new -key server.key -out server.csr

Note : Basé sur la documentation officielle d'Ubuntu 12.04.

 

3. Auto-signer son certificat

Auto-signer son certificat permet de sécuriser la connexion d'un serveur Web (par exemple) et ce gratuitement.
Néanmoins, un avertissement sera affiché la première fois au visiteur car ce certificat est "auto-signé" et qu'il n'a donc pas été vérifié par une autorité reconnue comme VeriSign, Geotrust, ...
Si vous ne souhaitez pas avoir cet avertissement, référez-vous au point 4 de ce tutoriel.

Pour auto-signer votre certificat, utiliser la commande suivante.
Note : La commande suivante crée un certificat valabble pendant un an (-days 365).

Code : Bash

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

 

4. Faire signer son certificat par une autorité reconnue

Si vous ne souhaitez pas qu'un avertissement s'affiche lorsque le visiteur tente d'accéder à votre site web. Vous devez obligatoirement le faire signer par une autorité reconnue comme VeriSign, Geotrust, ...
Pour cela, vous allez devoir transmettre votre requête de signature de votre certificat (ou Certificate Signing Request : CSR en anglais) à l'autorité souhaitée.
Vous devrez ensuite payer le prix demandé par l'autorité en question.
Une fois le paiement effectué, vous recevrez votre certificat signé (le fichier .crt) que vous pourrez ensuite installer sur votre serveur pour sécuriser la connexion à votre serveur et ce sans avertissement pour le visiteur.

Quelques autorités connues :
- VeriSign
- GeoTrus

 

5. Sécurisation du serveur web Apache

Pour sécuriser votre serveur web, commencez par activer le module "ssl" d'Apache.

Code : Bash

a2enmod ssl

Puis, ajoutez les lignes "SSLEngine", "SSLCertificateFile" et "SSLCertificateKeyFile" dans le virtualhost correspondant au domaine pourlequel vous avez créer le certificat.
Note : Si vous ne possédez qu'un seul site sur votre serveur, vous pouvez utiliser le virtualhost "default-ssl" présent par défaut sous Ubuntu 12.04.

Pour cela, allez dans le dossier "/etc/apache2/sites-available/" et modifiez le fichier "default-ssl" ou celui correspondant au virtualhost à sécuriser via SSL.

Code : Apache

# Virtualhost du HTTPS (port 443)
<VirtualHost *:443>
   ServerName informatiweblan.net
   ServerAlias www.informatiweblan.net
   DocumentRoot /var/www/informatiweblan.net
   
   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/server.crt
   SSLCertificateKeyFile /etc/apache2/ssl/server.key
</VirtualHost>

Modifiez ensuite le fichier "default", si vous le souhaitez, pour rediriger tous les visiteurs vers le domaine sécurisé par SSL :

Code : Apache

# Redirection du domaine HTTP vers celui en HTTPS
# Cela vous évitera d'accéder, par erreur, à la version non sécurisée de votre site.
<VirtualHost *:80>
   ServerName informatiweblan.net
   ServerAlias www.informatiweblan.net
   Redirect / https://informatiweblan.net/
</VirtualHost>

Et pour finir, activez le site "default-ssl" et redémarrer le serveur web Apache pour prendre en compte les changements.

Code : Bash

a2ensite default-ssl
service apache2 restart

Note : Basé sur la documentation officielle d'Ubuntu-fr.

 

6. Test de la configuration

Pour tester la configuration de votre serveur, accédez à votre site web via le protocole HTTPS (port : 433) "https://www.informatiweblan.net/".

Ensuite, si vous avez utilisé un certificat auto-signé (gratuit), vous recevrez l'avertissement "Cette connexion n'est pas certifiée".
Pour que cet avertissement ne s'affiche plus, vous (et les autres visiteurs) devrez cliquer sur le bouton "Ajouter une exception". Puis, sur "Confirmer l'exception de sécurité" dans la fenêtre qui s'ouvre.

Et pour finir, vous aurez accès à votre site web de manière sécurisée.

Vous pouvez voir les dates d'expiration en cliquant sur "Afficher le certificat".