Mise en place de certificats SSL sous Apache 2
Contents
1 Introduction
Les certificats ne sont pas toujours simple à comprendre et à mettre ne place. Néanmoins, je vais essayer de faire claire. Pour les personnes qui souhaitent être signé par une autorité de certification gratuite, je vous invite à aller sur le site CACert.
2 Installation
2.1 Debian
Encore une fois, c'est assez simple ici :
apt-get install openssl
Ensuite vous allez vous télécharger un petit programme qui va vous simplifier la vie :
cd ~/ mkdir ssl
Voici le fichier à télécharger et à mettre dans votre dossier ssl.
Une fois fait décompressez le :
tar -xzvf cert_manager.tar.gz
2.2 OpenBSD
Pour OpenBSD, rien de spéciale à installer. Apache est fourni en standart avec le module SSL.
3 Configuration
4 Debian
Rendons nous dans le dossier décompressé :
cd CERT_MANAGER
Si vous souhaitez changer le nombre de jours pour la validité de votre certificat, éditez le fichier ca_openssl.cnf et modifiez la ligne 39 :
default_days = 365
Changez 365 par ce que vous voulez (3650 pour 10 ans par exemple).
4.1 Création d'une autorité de certification
Nous allons maintenant créer l'autorité de certification de notre réseau local. En premier lieu, nous initialisons notre environnement de gestion des certificats :
./cert_manager.sh --init
Cette commande crée les dossiers et fichiers nécessaires au bon fonctionnement de notre script et vous pose les questions nécessaires à la configuration de votre autorité de certification :
You will now be asked to give informations for your certificate authority. Description du domaine [défaut : Domaine local]: Deimos Code de votre pays [défaut : FR]: Nom de votre région [défaut : Ile de France]: Nom de votre ville [défaut : Paris]: Nom de votre domaine [défaut : domain.local]: www.deimos.fr Email de l'administrateur [défaut : root@domain.local]: root@deimos.fr
Nous créons ensuite notre autorité de certification :
./cert_manager.sh --create-ca
Vous disposez à présent du nécessaire pour signer vos propres certificats.
4.2 Création d'un certificat serveur pour notre réseau local
Maintenant que vous disposez d'une autorité de certification, nous allons créer une requête de certification afin d'obtenir au final un certificat signé par notre autorité. Par exemple, pour créer un certificat pour notre serveur HTTPS :
./cert_manager.sh --generate-csr=https
Remarque: https est utilisé pour générer le nom de fichier de la requête. Il est préférable que cette valeur ne contienne ni espace, ni caractères spéciaux.
Vous devez alors saisir les informations de votre certificat :
You will now be asked to give informations for your certificate authority. Type de serveur [défault : HTTP server]: HTTPS server Code de votre pays [défaut : FR]: Nom de votre région [défaut : Ile de France]: Nom de votre ville [défaut : Paris]: Email de l'administrateur [défaut : root@deimos.fr]: Nom de votre domaine [défaut : domain.local]: www.deimos.fr Noms de domaines supplémentaires, un par ligne. Finissez par une ligne vide. SubjectAltName: DNS:doc.deimos.fr SubjectAltName: DNS:imp.deimos.fr SubjectAltName: DNS:mail.deimos.fr SubjectAltName: DNS:
Remarque: Comme vous pouvez le voir, cet outil vous donne la possibilité de générer des certificats valides pour plusieurs noms de domaines.
A la fin de la procédure, l'outil vous affiche la requête créée car vous pouvez, si vous le souhaitez, faire signer cette requête par le site CACert.
Si le certificat est destiné à votre réseau local, vous pouvez utiliser votre autorité de certification pour le signer :
./cert_manager.sh --sign-csr=https
Cette commande vous affiche les informations incluses dans la demande de certificat et vous demande si vous acceptez de le signer :
Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y
Vous disposez à présent de 2 fichiers qui ensemble forment votre certificat :
./CERTIFICATES/https_cert.pem ./PRIVATE_KEYS/https_key.pem
Il vous suffit a présent de copier ces fichiers et la clef publique de votre autorité de certification à l'endroit approprié pour la configuration de votre serveur :
./CERTIFICATE_AUTHORITY/ca-cert.pem
4.3 Intégration dans Apache
Pour la partie Apache, c'est asez simple, il suffit de copier certains fichiers :
mkdir -p /etc/apache2/ssl/ cp CERTIFICATE_AUTHORITY/ca-cert.pem /etc/apache2/ssl/deimos.fr.ca.crt cp CERTIFICATES/https_cert.cert /etc/apache2/ssl/deimos.fr.crt cp PRIVATE_KEYS/https_key.pem /etc/apache2/ssl/deimos.fr.key
Puis mettre ceci dans un VirtualHost au niveau d'Apache (faire un Virtualhost spécial SSL) :
<VirtualHost *:443> ServerAdmin deimos@deimos.fr ServerName fire.deimos.fr SSLEngine on SSLCACertificateFile /etc/apache2/ssl/deimos.fr.ca.crt SSLCertificateFile /etc/apache2/ssl/deimos.fr.crt SSLCertificateKeyFile /etc/apache2/ssl/deimos.fr.key DocumentRoot /var/www/ <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost>
4.4 OpenBSD
Pour générer les certificats, voici la marche à suivre :
5 Configuration d'Apache
5.1 Debian
Pour finir, ajouter ceci à /etc/apache2/ports.conf :
Listen 443
Il ne reste plus qu'à activer le mod ssl pour la configuration :
a2enmod ssl
On peut maintenant admirer le résultat en redémarrant Apache2 :-) :
/etc/init.d/apache2 restart
5.2 OpenBSD
6 Multi-VirtualHost SSL
Comme tout le monde, un jour tu as essayé d’avoir des VHost en ssl, et les gens d’Apache t’ont informé que tu peux crever. Le problème étant que tu ne peux avoir qu’un seul certificat car les infos comme le Host sont à l’intérieur de la requête, et ne sont pas accessibles à la couche qui décide du certificat à utiliser et s’occuppe du chiffrement.
Il existait des trucs pas beaux pour éviter le warning dans le browser, genre mettre un certificat pour *.mondomainedelamortquitue.biz mais c’est mort si tu as plusieurs domaines sur le serveur.
Donc voici la solution qui explique que même si la lib OpenSSL ne supporte pas l’extension TLS qu’il te faut (SNI), du coté de chez GNU c’est supporté depuis 2 ans. Voilà la documentation tant attendue :
Documentation sur l'implémentation du multi-SSL avec mod_gnutls
Documentation on enabling multiple HTTPS Sites For one IP using TLS extensions
7 Références
SSL and Certificates Documentations
http://www.traduc.org/docs/HOWTO/lecture/SSL-Certificates-HOWTO.html
Documentation pour OpenBSD