Apache et SSL, accéder à un site en https

Tutoriel décrivant la mise en place d’un certificat SSL pour accéder à un serveur web Apache en mode sécurisé (avec https:// à la place de http://).

Ce qui suit sous-entend que le serveur Apache est fonctionnel. Comme d’habitude, ceci est fait sur une Fedora 14, mais reste général.

Le module SSL devrait être installé par défaut, sinon il faut l’ajouter :

# yum -y install mod_ssl

Création de la clé

Pour accepter les requêtes SSL, Apache a besoin d’une clé pour le serveur et d’un certificat signé. Les noms de ces fichiers n’ayant pas d’importance, dans ce tutoriel, elles seront respectivement nommées server.key et server.crt. Un certificat personnel – gratuit – va ainsi être crée, pour une utilisation professionnelle, il faudrait préférer un certificat – payant – délivré par une autorité comme Verisign. La seule différence avec une clé faîte maison sera un avertissement par le navigateur lors de l’accès à une ressource SSL. La sécurité est la même, que le certificat soit signé par vous même ou par un organisme. La clé va être ajoutée sous /etc/pki/tls/certs :

# cd /etc/pki/tls/certs
# make server.key
umask 77 ; \
/usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
......................................................++++++
.............++++++
e is 65537 (0x10001)
Enter pass phrase: // Entrer une pass phrase
Verifying - Enter pass phrase: // Vérification

Il est ennuyeux de toujours saisir la pass phrase, elle est donc retirée de la clé privée :

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

Ajout du certificat

Pour la création du certificat, plusieurs renseignements vont être demandés afin d’être incorporés dans celui-ci, certaines informations sont toutefois facultatives :

# make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr

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) [GB]: FR
State or Province Name (full name) [Berkshire]: Lorraine
Locality Name (eg, city) [Newbury]: Ramonchamp // Yes! ;}
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your server's hostname) []: mondomaine.net
Email Address []: nom@mondomaine.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Création du certificat pour une durée de 10 ans :

# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=FR/ST=Lorraine/L=Ramonchamp/O=mondomaine/OU=mondomaine/CN=mondomaine.net/emailAddress=nom@mondomaine.net Getting Private key

On change les droits sur ces fichiers désormais importants avant de passer à la suite :

# chmod 400 server.*

Directives Apache

Il ne reste plus qu’à ajouter les directives Apache pour prendre en compte le SSL. Comme Fedora fait bien le boulot, ce travail est pré-mâché dans un fichier de configuration sous /etc/httpd/conf.d/ssl.conf. Il faut dé-commenter les lignes suivantes dans ce fichier :

DocumentRoot "/var/www/html" // Environ ligne 84
ServerName www.mondomaine.net:443 // Environ ligne 85
SSLCertificateFile /etc/pki/tls/certs/server.crt // Environ ligne 112
SSLCertificateKeyFile /etc/pki/tls/certs/server.key // Environ ligne 119

Redémarrage d’httpd :

# service httpd restart

C’est terminé, les pages peuvent désormais être accédées par https://www.mon-domaine.net/.

Forcer la consultation des pages en https

Ce qui peut être intéressant, c’est de forcer l’accès aux pages en https uniquement, pour faire ceci on va utiliser le mode rewrite. Ajouter ce qui suit au fichier httpd.conf (préfèrable) ou dans un fichier .htaccess :

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$  https://%{SERVER_NAME}/admin/? [R=301,L]

Après avoir redémarré Apache, on voit qu’en tapant http://www.mondonaine.net, on passe tout de suite en https://www.mondonaine.net ^.^

1 réflexion sur « Apache et SSL, accéder à un site en https »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *