GnuTLS contrairement au plus utilisé mod_ssl est une implémentation libre du protocole SSL pour Apache.

Il supporte le SNI (Server Name Indication) permettant d’avoir plusieurs sites protégés par SSL sur la même adresse IP contrairemnt à mod_ssl (du moins sur les implémentations anciennes).

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

Copier dans le presse-papier

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