Utiliser plusieurs certificats SSL sur un seul serveur apache

Plop à tous …

Le but de l’article du jour est d’utiliser plusieurs certificats SSL sur une même machine via le SNI (ce qui était impossible il y a quelques années de cela cf. wikipedia, le premier patch étant sorti en 2004, les premières implémentation sur les serveurs apache se sont fait sur la version 2.2.12 en Juillet 2009).

Depuis peu donc, on peut s’amuser à installer plusieurs certificats SSL, mais ça nécessite un tout petit peu de configuration (vraiment un tout petit peu en fait).

Les outils nécessaire :

  • Des certificats SSL (de préférences valide c’est gratos chez startSSL)
  • Un serveur apache de version 2.2.12 ou supérieur
  • La librairie openssl 0.9.8j ou supérieur

La configuration niveau apache (il faut bien entendu avoir activer le mod ssl), et copier les fichiers crt et key que vous on fournit vos fournisseurs de certificats sur le serveur dans un dossier accessible à apache (chez moi /etc/apache2/cert/).

il faut modifier la config « /etc/apache2/ports.conf » et faire en sorte que le ifmodule du mod_ssl ressemble à ça :


    NameVirtualHost *:443
    Listen 443

Généralement, le NameVirtualHost n’est pas mis dans la configuration par défaut, il faut donc le rajouter.

Puis enfin créer le fichier de configuration s’occupant de vos certificats et de les servir suivant le nom de domaine demandé (chez moi blog.gaetan-grigis.eu et un-autre-sous-domaine.gaetan-grigis.eu).


   ServerName blog.gaetan-grigis.eu
   DocumentRoot /var/www/blog
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /etc/apache2/cert/blog.crt
   SSLCertificateKeyFile /etc/apache2/cert/blog.key
   SSLCertificateChainFile /etc/apache2/cert/sub.class1.server.ca.crt
   SSLCACertificateFile /etc/apache2/cert/ca.crt
   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   CustomLog /var/log/apache2/ssl_request.log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


   ServerName un-autre-sous-domaine.gaetan-grigis.eu
   DocumentRoot /var/www/un-autre-sous-domaine
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /etc/apache2/cert/un-autre-sous-domaine.crt
   SSLCertificateKeyFile /etc/apache2/cert/un-autre-sous-domaine.key
   SSLCertificateChainFile /etc/apache2/cert/sub.class1.server.ca.crt
   SSLCACertificateFile /etc/apache2/cert/ca.crt
   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   CustomLog /var/log/apache2/ssl_request.log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Et voilà, si vous avez utilisé StartSSL, vous avez accès à deux sous-domaines différents avec des certificats valide différent sur une seule et même machine … elle est pas belle la vie ?? (La vie d’un geek est passionnante en effet ;)).

PS : On peut bien sûr en créer autant qu’on veut, c’est pas limité à deux sous-domaines. 😉