www.starend.org

TechNIX

Tags

apache ssl certificat proxy mod_proxy http https vhost

Serveur apache en frontal ssl avec mod_proxy

14/05/2007

25/05/2007 mise à jour, ssl pour plusieurs vhosts.

Introduction

Le but ici est de décharger la partie crypto ssl du serveur web, qui n'a pas que ça a faire. Pour cela, on utilise un reverse proxy en frontal du serveur web. Celui-ci peut être un apache configuré en reverse proxy avec le module mod_proxy. Dans le monde pro, on peut même façiliter la lourde tâche du proxy avec des cartes crypto ssl spécifiques.

En pratique, j'utilise ce principe pour décharger mon mini-serveur webcam (machine 'www'). Tous les postes clients, y compris depuis internet, ont accé à la webcam en https (ssl donc) via un serveur (machine 'proxy ssl') intermédiaire transparent (le client ne s'en rend pas compte).

Schéma de principe :

/proxy_ssl.png" border=0 alt="Schema" />

Activation de mod_proxy

Sur la machine proxy, il est nécessaire de vérifier que apache dispose bien du mod_proxy activé. Sous Debian et Ubuntu, vérifier que ces liens existent :

proxy:/etc/apache2/mods-enabled# ls -lh proxy*
lrwxrwxrwx 1 root root 38 2007-01-06 10:36 proxy.conf -> /etc/apache2/mods-available/proxy.conf
lrwxrwxrwx 1 root root 43 2007-01-06 10:36 proxy_http.load -> /etc/apache2/mods-available/proxy_http.load
lrwxrwxrwx 1 root root 38 2007-01-06 10:36 proxy.load -> /etc/apache2/mods-available/proxy.load

Si ce n'est pas le cas, les créer... et redémarrer apache...

Puis vérifier qu'ils sont bien chargés :

proxy:/etc/apache2/mods-enabled# apache2ctl -M 2>&1 | grep proxy
 proxy_module (shared)
 proxy_http_module (shared)

Configuration du site virtuel

Maintenant que l'on a tout ce qu'il faut, on crée un site virtuel (ça peut aussi être le site par défaut) comme cela :

proxy:/etc/apache2/sites-available# more webcam.starend.org
NameVirtualHost *
<VirtualHost *>
        ServerName webcam.starend.org
        Redirect / https://webcam.starend.org/
</VirtualHost>

NameVirtualHost *:443
<VirtualHost *:443>
        ServerName webcam.starend.org
        SSLEngine On
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / http://webcam.starend.lan/
        ProxyPassReverse / http://webcam.starend.lan/
</VirtualHost>

Explications : la première partie traite le http (non ssl) et revoie le client qui demande 'http://webcam.starend.org' vers le lien 'https://webcam.starend.org/' grâce à la directive 'Redirect'. Des fois que celui-ci veuille accéder à la webcam en clair, ce qui n'est pas autorisé. La deuxième partie retransmet de façon transparente les demandes du client vers la page 'http://webcam.starend.lan/' (réseau interne) grâce aux directives 'ProxyPass' et 'ProxyPassReverse'. On voit que, outre le port utilisé (*:443), le moteur ssl est activé avec la directive 'SSLEngine On'. La page 'http://webcam.starend.lan/' n'étant bien sûr pas directement joignable par le poste client...

On crée le lien pour activer ce nouveau site virtuel :

ln -s /etc/apache2/sites-available/webcam.starend.org /etc/apache2/sites-enabled/webcam.starend.org

Et on redémarre apache :-)

/etc/init.d/apache2 restart

Multiples sites virtuels avec ssl

ATTENTION, sauf à accepter d'avoir une fenêtre d'alerte sur le poste client, il n'est pas possible d'utiliser plusieurs certificats différents sur plusieurs sites virtuels de nom différent avec la même adresse IP et le même port TCP. Il vous faudra soit utiliser des adresses IP différentes, soit un port TCP différents. Ce qui dans un cas comme dans l'autre peut poser problème. Je n'ai qu'une adresse IP publique, et les proxy des sociétés ne reconnaissent souvent que le port TCP/443 pour https.

Ce n'est pas une mauvaise volonté d'apache. C'est valable avec tous les serveurs web. Cela tient simplement au fait que la session ssl s'initie, avec échange de certificats, avant que le moindre contenu http ne puisse être échangé, donc avant que le serveur web ne connaisse le site demandé (vhost).

Licence Creative Common 2007 :: BY-NC-SA :: Webdesign DENDIEVEL Stéphane