Dernière mise à jour : 19/05/2004
Cet article va tenter de vous démontrer qu'il ne faut pas avoir peur de mod_ssl sous Apache. Mod_ssl est un projet visant à intégrer un module sécurisé (https) avec Apache. J'ai pour cela utilisé une Debian Woody mais il ne devrait pas être dur de l'adapter à votre distribution. Vous devez bien sûr avoir un serveur Apache en état de marche, je ne rentrerais donc pas dans la configuration de celui-ci (faîtes http://localhost) pour vous assurer qu'il tourne. Enfin, il est important de savoir que mod_ssl n'est pas lié à OpenSSL, ce sont deux projets différents. Tout est d'ailleurs expliqué sur le site officiel que je vous invite à visiter
Il nous faut tout d'abord installer mod_ssl, cette procédure ultra-complexe se symbolise par un : apt-get install libapache-mod-ssl qui devrait vous retourner une partie de ceci :
-
The following NEW packages will be installed:
libapache-mod-ssl openssl
...
Creating directory /etc/ssl
..
Setting up libapache-mod-ssl (2.8.9-2.1) ...
Makefile.crt ... Skipped
ca-bundle.crt ... Skipped
server.crt ... Skipped
snakeoil-ca-dsa.crt ... 0cf14d7d.0
snakeoil-ca-rsa.crt ... e52d41d0.0
snakeoil-dsa.crt ... 5d8360e1.0
snakeoil-rsa.crt ... 82ab5372.0
-
openssl genrsa -des3 -rand file1:file2:file3:file4:file5 -out server.key 1024
0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
......................++++++
...............++++++
e is 65537 (0x10001)
Enter PEM pass phrase: # Entrez votre mot de passe
Verifying password - Enter PEM pass phrase: # Confirmez votre mot de passe
Vous devez ensuite retirer le mot de passe de la clé, pour se faire, utilisez :
-
openssl rsa -in server.key -out server.pem
read RSA key
Enter PEM pass phrase: # Entrez votre mot de passe
writing RSA key
Vous devez ensuite générer le Certificat qui sera affiché lors de la connexion sécurisée, pour se faire, il suffit de taper la commande qui suit. Vous pouvez entrer les valeurs du certificat par défaut en éditant le fichier /usr/lib/ssl/openssl.cnf, comme ça ce sera fait une fois pour toutes.
-
openssl req -new -key server.key -out server.csr
Using configuration from /usr/lib/ssl/openssl.cnf
Enter PEM pass phrase: # Entrez votre mot de passe
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) []:Quimper
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FRLinux Evil Corp
Organizational Unit Name (eg, section) []:trollLand
Common Name (eg, YOUR name) []:FRLinux
Email Address []:votre.email@votredomaine.org
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
Vous n'avez sans doute pas besoin de faire signer le certificat par une autorité compétente si c'est pour un usage personnel, vous pouvez alors le signer vous même comme suit :
-
openssl x509 -req -days 60 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=FR/ST=France/L=Quimper/O=FRLinux Evil Corp/OU=trollLand/CN=FRLinux/Email=votre.email@votredomaine.org
Getting Private key
Enter PEM pass phrase:
Bravo, la partie création de certificats est terminée, il nous faut à présent copier server.pem et server.crt dans un répertoire pour apache. faîtes donc : mkdir /etc/apache/certs/ && cp server.{pem,crt} /etc/apache/certs. Libre à vous de mettre ça ailleurs, c'est ma méthode pour le faire. Comme vous l'aurez remarqué, nous n'avons pas encore touché à la configuration Apache. Editez donc /etc/apache/httpd.conf et assurez vous d'ajouter les directives suivantes aux bons endroits :
-
LoadModule ssl_module /usr/lib/apache/1.3/mod_ssl.so
...
Listen 80
Listen 443
...
SSLMutex sem
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLSessionCache dbm:/var/run/apache-sslcache.dbm
SSLSessionCacheTimeout 300
SSLCertificateFile /etc/apache/certs/server.crt
SSLCertificateKeyFile /etc/apache/certs/server.pem
SSLOptions StdEnvVars
<VirtualHost *:443>
SSLProtocol SSLv3
SSLEngine on
DocumentRoot /var/www
ServerName votre.serveur.org
</VirtualHost>
Voila pour la configuration, la partie VirtualHost est secondaire mais j'en avais besoin sur mon serveur. Il ne reste alors qu'à redémarrer votre petit serveur apache par /etc/init.d/apache restart. Juste pour le fun, connectez vous alors sur https://localhost. En cas d'échec, pensez toujours à vérifier /var/log/apache/access.log et error.log (apache devient httpd sous d'autres distributions). Voici ce que vous devriez obtenir si tout va bien :
-
tail /var/log/apache/error.log
[Wed May 28 11:35:21 2003] [notice] caught SIGTERM, shutting down
[Wed May 28 11:35:26 2003] [notice] Apache/1.3.26 (Unix) Debian GNU/Linux mod_ssl/2.8.9 OpenSSL/0.9.6g PHP/4.1.2 configured -- resuming normal operations
tail /var/log/apache/access.log -n 2
xx.xx.xx.xx - - [28/May/2003:12:51:11 +0100] "GET /index.php//css/default.css HTTP/1.1" 200 1675 "https://localhost/" "Mozilla/5.0 (compatible; Konqueror/3.1; Linux)"
Près d'un an après l'écriture de cet article, Eric (un lecteur) a eu la bonne idée de m'envoyer une petite astuce que je vais vous donner ici afin de ne pas avoir à rentrer de mot de passe lors du démarrage du serveur apache. Il vous suffit pour cela de retirer l'encryption du certificat comme ceci :
-
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
chmod 400 server.key
Votre configuration mod_ssl touche à sa fin. Un code 200 dans les accès signifie que la page a été correctement délivrée au client. Cet article est bien sûr adaptable à d'autres distributions mais devrait vous fournir une bonne base pour mettre en place rapidement votre serveur sécurisé en place.