Installation du module
sudo apt-get install libapache2-mod-gnutls
On n’oublie pas de désactiver le module mod_ssl
si présent pour éviter d’utiliser deux fois le port 443 :
sudo a2dismod ssl
On active ensuite le module GnuTLS :
sudo a2enmod gnutls
On doit ensuite redémarrer le serveur Apache avec la commande :
sudo /etc/init.d/apache2 restart
Configuration spécifique
Activer le SNI
Pour activer la possibilité d’avoir plusieurs sites différents utilisant le port 443 (ssl), il faut utiliser la directive NameVirtualHost
.
On édite le fichier de configuration des ports d’Apache2 :
sudo nano /etc/apache2/ports.conf
Et ajouter dans la partie <IfModule mod_gnutls.c>...</IfModule>
ajouter :
NameVirtualHost *:443
Création d’un virtualhost
On peut maintenant créer un virtualhost qui se crée exactement comme pour un site normal :
sudo nano /etc/apache2/sites-available/test-ssl
On y ajoute la configuration de base suivante par exemple, conditionnée à la présence du module gnutls
:
<IfModule mod_gnutls.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName domaine.tld DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined </VirtualHost> </IfModule>
NB : Attention pour le moment, nous n’avons toujours pas créé de certificat
Modification de vos certificats pour mod_gnutls
GnuTLS ne gère pas tout à fait les mêmes directives que mod_ssl pour l’indication des certificats, clés et chains nécessaires.
Les directives suivantes remplacent celles de mod_ssl
:
-
GnuTLSCertificateFile
remplaceSSLCertificateFile
; -
GnuTLSKeyFile
remplaceSSLCertificateKeyFile
;
Par contre il n’y a pas de directives pour remplacer :
-
SSLCertificateChainFile
; -
SSLCACertificateFile
;
Ces deux dernières directives permettent de spécifier pour mod_ssl
des certificats intermédiaires ou chainés.
Pour pallier ce manque il suffit d’insérer le contenu de ces certificats dans le votre.
Si on prend l’exemple de StartSSL ici, on a besoin de notre certificat ainsi que sub.class1.server.ca.pem
et ca.pem
.
Pour ce faire il suffit de les concaténer dans notre certificat comme ceci :
# On ajoute sub.class1.server.ca.pem dans notre /etc/ssl/domaine.tld.pem cat sub.class1.server.ca.pem >> /etc/ssl/domaine.tld.pem # On ajoute ca.pem dans notre /etc/ssl/domaine.tld.pem cat ca.pem >> /etc/ssl/domaine.tld.pem
Ajout du certificat dans le virtualhost
On peut alors ajouter nos directives dans le virtualhost précédemment créé :
sudo nano /etc/apache2/sites-available/test-ssl
Et on ajoute dans notre virtualhost :
GnuTLSEnable on GnuTLSKeyFile /etc/ssl/domaine.tld.key GnuTLSCertificateFile /etc/ssl/domaine.tld.pem GnuTLSPriorities NONE:+VERS-TLS1.1:+VERS-TLS1.0:+AES-256-CBC:+DHE-RSA:+RSA:+SHA1:+COMP-NULL:+COMP-DEFLATE
Activation du virtualhost et redémarrage
On peut maintenant activer le virtualhost :
sudo a2ensite test-ssl
Puis recharger la configuration d’Apache :
sudo /etc/init.d/apache2 reload
Vous devriez maintenant pouvoir accéder avec votre site à l’adresse : https://domaine.tld