Outils pour utilisateurs

Outils du site


tutoriels:virtualhost-ssl

APACHE : VirtualHosting SSL GnuTLS & mod_SSL

SSL

Introduction

Cette veille techno va nous permettre de créer plusieurs instances web HTTPS sur un serveur ayant une seule IP, autrement dit du virtualhosting par nom over SSL.

Pour comprendre SSL en détails, je vous recommande la lecture de cet article.

Sur une debian Squeeze avec Apache2 et le module ssl par défaut, la configuration de plusieurs instances nous retournera un warning au redémarrage comme ceci:

Erreur Apache mod_ssl

Apache démarre finalement mais lorsque vous essayerez les accès en https, le serveur présentera un seul et même certificat. Cette problématique est due au protocole de Handshake de SSL/TLS.

Heureusement les choses évoluent et notamment l'extension de TLS nommé SNI (Server Name Indication) permet de résoudre ce problème. Toutefois cette évolution est limitée au support des navigateurs utilisateurs.

Plusieurs méthodes semblent possibles, apache avec le module GnuTLS ou avec le module SSL (>=OpenSSL 0.9.8).

Configuration de GnuTLS

GnuTLS

  • Installation du module GnuTLS:

libapache2-mod-gnutls

  • Désactiver le module SSL et activer le module GnuTLS:

a2dismod ssl
a2enmod gnutls
service apache2 restart

  • Modifier la configuration apache:

vi /etc/apache2/apache.conf

<IfModule mod_gnutls.c>
    Listen 443
    NameVirtualhost *:443
    GnuTLSCache dbm /var/cache/gnutls
    GnuTLSCacheTimeout 600
</IfModule>

  • Créer vos VirtualHosts en utilisant les instructions du module pour renseigner vos certificats:

vi /etc/apache2/sites-available/gnutls.conf

<IfModule mod_gnutls.c>
<VirtualHost *:443>
        ServerName              first.test.local:443
        DocumentRoot            /data/www/first
        GnuTLSEnable            on
        GnuTLSCacheTimeout      500
        GnuTLSExportCertificates on
        GnuTLSClientCAFile      /root/demoCA/cacert.pem
        GnuTLSCertificateFile   /root/ssl/first/first.test.local.crt
        GnuTLSKeyFile           /root/ssl/first/first.test.local.key
        CustomLog               /var/log/apache2/first.test.local-access.log combined
        ErrorLog                /var/log/apache2/first.test.local-error.log
</VirtualHost>
<VirtualHost 192.168.1.27:443>
        ServerName              second.test.local:443
        DocumentRoot            /data/www/second
        GnuTLSEnable            on
        GnuTLSExportCertificates on
        GnuTLSCacheTimeout      500
        GnuTLSPriorities        NORMAL
        GnuTLSCertificateFile   /root/ssl/second/second.test.local.crt
        GnuTLSKeyFile           /root/ssl/second/second_key.pem
        CustomLog               /var/log/apache2/second.test.local-access.log combined
        ErrorLog                /var/log/apache2/second.test.local-error.log
</VirtualHost>
</IfModule>

  • Activer votre configuration:

a2ensite gnutls.conf

Configuration OpenSSL

mod_ssl

  • Vérification de la version d'OpenSSL pour le support de la fonctionnalité SNI (compilé nativement par défaut à partir de la version 0.9.8j)

Version OpenSSL

  • Activer le module SSL et désactiver le module GnuTLS:

2enmod ssl
a2dismod gnutls
service apache2 restart

  • Renseigner la configuration Apache pour le module SSL:

vi /etc/apache2/ports.conf

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
    NameVirtualHost *:443
</IfModule>

  • Renseigner vos virtualhosts avec les directives propres au module SSL:

vi /etc/apache2/sites-available/openssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>

        ServerName              first.test.local:443
        DocumentRoot            /data/www/first
        SSLEngine on
        SSLCertificateFile    /root/ssl/first/first.test.local.crt
        SSLCertificateKeyFile /root/ssl/first/first.test.local.key
        SSLCACertificateFile /root/demoCA/cacert.pem
        
        CustomLog               /var/log/apache2/first.test.local-access.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
        ErrorLog                /var/log/apache2/first.test.local-error.log
</VirtualHost>
<VirtualHost *:443>
        ServerName              second.test.local:443
        DocumentRoot            /data/www/second
        SSLEngine on
        SSLCertificateFile    /root/ssl/second/second.test.local.crt
        SSLCertificateKeyFile /root/ssl/second/second_key.pem
        SSLCACertificateFile /root/demoCA/cacert.pem

        CustomLog               /var/log/apache2/second.test.local-access.log combined
        ErrorLog                /var/log/apache2/second.test.local-error.log
</VirtualHost>

</IfModule>

  • Activer votre configuration:

a2ensite openssl.conf

Vérification

J'ai personnellement validé mes tests avec les navigateurs actuels:

  • Chrome 17.0.963.83
  • Firefox 11.0
  • IE 9.0.5

SSL first site SSL second site

tutoriels/virtualhost-ssl.txt · Dernière modification: 15/04/2016 à 21:15 (modification externe)

Outils de la page