« mod_gnutls » : Plusieurs certificats SSL sur un « Apache »

On entend souvent dire, à tort, qu’il n’est pas possible d’utiliser plusieurs certificats SSL sur un même serveur web « apache ».

Cette brève propose d’utiliser le module gnutls d’apache ( http://www.outoforder.cc/projects/apache/mod_gnutls/ ) afin d’utiliser un certificat pas vhost sur un serveur web.

Nous considérerons par la suite que vous disposez déjà d’une installation d’apache fonctionnelle et qu’il ne reste que les certificats à mettre en place.

Installation

Le module « mod_gnutls » est disponible sous la plupart des distributions Linux. Sous Gentoo Linux vous l’installez via emerge en ayant pris soin d’activer le support d’SSL :

webserver ~ # grep gnutls /etc/portage/package.use 
www-apache/mod_gnutls ssl
webserver ~ # emerge -av mod_gnutls
...

la seule originalité vient du fait que ce module n’est pas activé directement depuis les « use flags » (paramètres de compilation sous Gentoo) d’apache.

Sous Debian, et ses dérivés, « apt-get » ou « aptitude » assureront le déploiement du paquet :

root@webserver:~# aptitude install libapache2-mod-gnutls
...

Génération des certificats

Nous ne reviendrons pas ici sur les détails de la génération des certificats. Je vous renvois à la page « Autorité de certification et certificats OpenSSL » d’Admin Linux pour en savoir plus sur ce point.

Notez simplement que vos certificats se distinguerons par leurs « common name » (CN). Vous pourrez ainsi créer un certificat pour votre WebMail dont le CN serait webmail.mondomaine.org et un autre pour l’administration de votre site web dont le CN serait www.mondomaine.org. L’important étant de rester cohérent.

Au final, la génération de la première clé donnera quelque chose du type :

root@picsou:~# mkdir certs
root@picsou:~# cd certs/
root@picsou:~/certs# openssl genrsa -out webmail.admin-linux.fr.key 1024
Generating RSA private key, 1024 bit long modulus
..................................................................................................++++++
...++++++
e is 65537 (0x10001)
root@picsou:~/certs# openssl req -key webmail.admin-linux.fr.key -new -out webmail.admin-linux.fr.csr -days 365
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]:Ile-De-France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Admin Linux
Organizational Unit Name (eg, section) []:Service Informatique
Common Name (eg, YOUR name) []:webmail.admin-linux.fr
Email Address []:fhh@admin-linux.fr
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
root@picsou:~/certs# openssl req -x509 -in webmail.admin-linux.fr.csr -key webmail.admin-linux.fr.key > webmail.admin-linux.fr.crt

et la génération de la seconde clé :

root@picsou:~/certs# openssl genrsa -out www.admin-linux.fr.key 1024
...
root@picsou:~/certs# openssl req -key www.admin-linux.fr.key -new -out www.admin-linux.fr.csr -days 365
...
Common Name (eg, YOUR name) []:www.admin-linux.fr
...
root@picsou:~/certs# openssl req -x509 -in www.admin-linux.fr.csr -key www.admin-linux.fr.key > www.admin-linux.fr.crt
root@picsou:~/certs# ls -l
total 24
-rw-r--r-- 1 root root 1432 Dec  3 16:15 webmail.admin-linux.fr.crt
-rw-r--r-- 1 root root  749 Dec  3 16:13 webmail.admin-linux.fr.csr
-rw-r--r-- 1 root root  887 Dec  3 16:11 webmail.admin-linux.fr.key
-rw-r--r-- 1 root root 1415 Dec  3 16:30 www.admin-linux.fr.crt
-rw-r--r-- 1 root root  741 Dec  3 16:28 www.admin-linux.fr.csr
-rw-r--r-- 1 root root  887 Dec  3 16:25 www.admin-linux.fr.key

Comme précédemment, je vous renvois à l’article « Autorité de certification et certificats OpenSSL » pour la signature de vos clés par une autorité de certification.

Configuration d’apache

La configuration d’apache ce décompose en deux parties :

  • activation du module d’une part ;
  • configuration des vhosts d’autre part.

Activation du module

Sous Gentoo Linux, contentez vous d’ajouter « GNUTLS » à la liste des options de démarrage d’apache2. Pour cela vous devrez ajouter « -D GNUTLS » dans la ligne « APACHE2_OPTS » de « /etc/conf.d/apache2 » :

webserver ~ # grep "^APACHE2_OPTS" /etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST -D GNUTLS -D PHP5"

Remarquez que le module SSL n’est pas chargé puisque nous le remplaçons par GNUTLS…

Sous Debian et ses dérivés, créez simplement deux liens, « /etc/apache2/mods-enabled/gnutls.conf » et « /etc/apache2/mods-enabled/gnutls.load » pointant respectivement vers « /etc/apache2/mods-available/gnutls.conf » et « /etc/apache2/mods-available/gnutls.load » :

root@picsou:~# ln -s /etc/apache2/mods-available/gnutls.{conf,load} /etc/apache2/mods-enabled/

Sous CentOS et autres distributions calquées sur RedHat, les choses doivent être peu différentes si se n’est que l’action se passe dans « /etc/httpd ».

Quelque soit la distribution utilisée, validez vos modifications par un redémarrage du service web (un « reload » suffit probablement, mais là je pouvais redémarrer…) :

root@picsou:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

Configuration des vhosts

L’activation de GNUTLS sur un vhosts est obtenue par les options suivantes :

  • GnuTLSEnable qui active ou désactive GNUTLS (valeur « on » ou « off ») ;

  • GnuTLSKeyFile qui désigne la localisation de la clé ;

  • GnuTLSPriorities qui définit le chiffrement autorisé, l’algorithme d’échange de clés, et/ou le type de compression utilisé(voir la documentation de « mod_gnutls » pour plus de détails) ;

  • GnuTLSCertificateFile qui désigne le chemin vers le certificat.

A ces options nous ajoutons la modification du port d’écoute (443 généralement).

Nous plaçons nos certificats SSL à un endroit cohérent et les protégeons :

root@picsou:~# mv certs /etc/apache2/
root@picsou:~# chown -R root.apache /etc/apache2/certs
root@picsou:~# chmod 2710 /etc/apache2/certs
root@picsou:~# chmod 640 /etc/apache2/certs/*

avant d’apporter les modifications aux vhosts :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<IfDefine GNUTLS>
	Listen 10.0.10.251:443
	NameVirtualHost 10.0.10.251:443
	<VirtualHost 10.0.10.251:443>
        	ServerName webmail.admin-linux.fr:443
        	ServerAlias webmail
		ServerAdmin fhh@admin-linux.fr
 
		GnuTLSEnable 		on
		GnuTLSPriorities	NORMAL
		GnuTLSKeyFile		/etc/apache2/certs/webmail.admin-linux.fr.key
		GnuTLSCertificateFile	/etc/apache2/certs/webmail.admin-linux.fr.crt
 
        	DocumentRoot "/website/sites/webmail"
        	<Directory "/website/sites/webmail">
        	        Options FollowSymLinks
        	        AllowOverride None
        	        Order allow,deny
			allow from all
		</Directory>
	</VirtualHost>
 
	<VirtualHost 10.0.10.251:443>
        	ServerName www.admin-linux.fr:443
        	ServerAlias admin-linux.fr
		ServerAdmin fhh@admin-linux.fr
 
		GnuTLSEnable 		on
		GnuTLSPriorities	NORMAL
		GnuTLSKeyFile		/etc/apache2/certs/www.admin-linux.fr.key
		GnuTLSCertificateFile	/etc/apache2/certs/www.admin-linux.fr.crt
 
  		DocumentRoot "/website/sites/admin-linux"
 	        <Directory "/website/sites/admin-linux">
 	                Options FollowSymLinks
 	                AllowOverride None
        	        Order allow,deny
			allow from all
 		</Directory>
	</VirtualHost>
</IfDefine>

L’exemple est ici extrait d’une Gentoo d’où le « <IfDefine GNUTLS> ». Si le module n’est pas activé, les vhosts ne seront pas présentés. Sous Debian nous aurions pu écrire « <IfModule mod_gnutls.c> » par exemple.

Je vous renvoie à la documentation du module pour d’autres exemples de configurations (http://www.outoforder.cc/projects/apache/mod_gnutls/docs/).

Références

La documentation de mod_gnutls : http://www.outoforder.cc/projects/apache/mod_gnutls/docs/

Laisser un commentaire

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