L'utilisation du SSL permet le chiffrement des données transmisent entre le client et le serveur ce qui empêche par exemple qu'un mot de passe circule en clair.
Je n'expliquerai pas plus son fonctionnement, pour avoir plus d'informations je vous invite fortement à lire ceci :
*
http://fr.wikipedia.org/wiki/SSL
*
http://www.commentcamarche.net/crypto/ssl.php3
La démarche n'est pas très complexe, un peu de colle, des clous, un mètre (moi :-D) et un marteau !!
Trêve de plaisanteries.
Installation.
Le support du SSL est en fait un "simple" module qui est installé de base avec Apache.
Il nous reste plus qu'a le charger.
# a2enmod ssl
Résultat :
4:19 root@serveur-backup ~# a2enmod ssl
Module ssl installed; run /etc/init.d/apache2 force-reload to enable.
SSL est écouté sur le port 443. Apache écoute par défaut sur le port 80, nous allons lui dire d'écouter aussi sur le port 443.
Pour cela dans le fichier ports.conf qui se trouve dans /etc/apache2/, on ajoute ceci :
Listen 443
On relance Apache pour que le module et le port soient pris en comptes.
# /etc/init.d/apache2 restart
SSL est désormais activé sur le serveur.
Rapide hein ?
Configuration.
La configuration va consister à créer un virtualhost qui écoutera sur le port 443.
Nous allons créer un fichier vhost-ssl.conf que nous allons placer dans le répertoire /etc/apache2/conf.d/ puis on y ajoute le contenu suivant :
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
SSLProtocol All
SSLCertificateFile /etc/apache2/ssl/ssl.crt/mon.domaine.com.crt
SSLCertificateKeyFile "/etc/apache2/ssl/ssl.key/mon.domaine.com.key"
<Directory "/var/www/marcel/">
AllowOverride All
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
DocumentRoot /var/www/marcel/
ServerName
www.marcel.com
ServerAlias marcel.com
ErrorLog /var/www/logs/marcel.com-error.log
CustomLog /var/www/logs/marcel.com-access.log combined
</virtualHost>
Explications :
NameVirtualHost *:443
Grâce à cette directive votre serveur va pouvoir résoudre les adresses DNS sur le port 443.
<VirtualHost *:443>
Ouverture du virtualhost, signifie que l'on écoute sur toutes les IP sur le port 443.
SSLEngine On
Activation du support SSL pour ce virtualhost.
SSLProtocol All
Permet d'utiliser tous les protocoles SSLv2, SSLv3 et TLSv1.
SSLCertificateFile /etc/apache2/ssl/ssl.crt/mon.domaine.com.crt
Emplacement du certificat du serveur.
SSLCertificateKeyFile "/etc/apache2/ssl/ssl.key/mon.domaine.com.key"
Emplacement de la clés privée du certificat du serveur.
La configuration du virtualhost est terminée. :!:
Création du certificat.
Un certificat SSL (Secure Socket Layer) est un fichier spécial qui est installé sur un serveur web. Ce certificat permet de crypter les données émises par le serveur web afin d'en protéger la confidentialité. Un certificat SSL est créé et attribué à une entité bien identifiée (en général la personne morale ou physique propriétaire du site) et après vérification du droit de celle-ci à utiliser ce certificat.
Source :
http://www.netenligne.com/ecommerce/ssl1.asp
Voila, après cette petite introduction il est temps de passer au concret.
Pour générer le certificat nous allons utiliser OpenSSL.
Création de la bi-clés privées du certificat.
$ openssl genrsa -out gzw.key 1024
Résultat :
18:09 root@serveur-backup ~# openssl genrsa -out gzw.pem 1024
Generating RSA private key, 1024 bit long modulus
........++++++
...................................................................++++++
e is 65537 (0x10001)
Explications :
*
genrsa indique que l'on souhaite génèrer une clés privée de type RSA.
*
-out gzw.key indique le nom de la clés.
*
1024 défini la taille de la clès.
Génèrer le certificat.
$ openssl req -new -x509 -days 365 -key gzw.key -out gzw.crt
Résultat :
18:52 root@serveur-backup ~# openssl req -new -x509 -days 365 -key gzw.pem -out gzw.crt
Enter pass phrase for gzw.pem:
Entrez un mot de passe puis répondez aux questions suivantes :
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []😛aris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:GoLDZoNE Web HoSTING
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:www.goldzoneweb.info
Email Address []:
administrateur@goldzoneweb.info
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:GaetanGolduche
An optional company name []:GZW
Explications :
*
req permet créer le certificat.
*
-new indique que c'est un nouveau certificat, c'est ce paramètre qui génère le questionnaire.
*
-x509 permet de signer le certificat automatiquement.
*
-days 365 défini la durée de validité du certificat, ici 365 jours.
*
-key server.key indique la clés RSA qui sera utilisée.
*
-out gzw.crt indique le nom du certificat.
Prise en charge du certificat par Apache.
Maintenant que la clés et le certificat sont crées, il nous faut indiquer leur chemin à Apache.
Pour une question d'ergonomie, nous allons créer deux répertoires ou seront placés les fichiers obtenus par OpenSSL dans le répertoire /ect/apache2/ssl/
# mkdir ssl-crt && mkdir ssl-key
Placez le fichier .key dans le répertoire ssl-key et le fichier .crt dans le répertoire ssl-crt.
La configuration du virtualhost doit ressembler à ça :
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
SSLProtocol All
SSLCertificateFile /etc/apache2/ssl/ssl.crt/gzw.crt
SSLCertificateKeyFile "/etc/apache2/ssl/ssl.key/gzw.key"
<Directory "/var/www/marcel/">
AllowOverride All
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
DocumentRoot /var/www/marcel/
ServerName
www.marcel.com
ServerAlias marcel.com
ErrorLog /var/www/logs/marcel.com-error.log
CustomLog /var/www/logs/marcel.com-access.log combined
</virtualHost>
Alors, le mod SSL est activé, le certificat est créé, le virtualhost est configuré maintenant il ne reste plus qu'a inclure le virtualhost dans le fichier de configure apache2.conf qui se trouve dans /etc/apache2/, il faut donc ajouter ceci :
# Virtualhost SSL
Include /etc/apache2/conf.d/vhost-ssl.conf
On relance Apache pour déclarer le nouveau virtualhost.
# /ect/init.d/apache2 restart
Pfiouuu, ça c'est fait.
Je pense que l'utilisation d'OpenSSL à dû vous sembler un poil complexe, si tel est le cas je vous invite à lire ceci (en anglais) :
http://www.openssl.org/docs/apps/openssl.html
Vous pouvez vous dire "Je l'ai fait !!". 😉