Hôtes virtuels Apache + SSL

classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

Hôtes virtuels Apache + SSL

Maxime DERCHE-3

Bonjour à toutes et tous,

Je cherche à proposer du HTTPS pour tous les hôtes virtuels que
j'héberge. L'idée d'un certificat multidomaine m'embête un peu à cause
de son manque de souplesse (il faut refaire un certificat pour chaque
ajout ou suppression d'hôte virtuel), et je suis donc parti dans l'idée
de créer un certificat pour chaque hôte virtuel, et de faire en sorte
qu'Apache utilise le bon certificat selon les besoins.

J'ai donc peuplé /etc/ssl/ et /etc/ssl/private/ en suivant à la lettre
la FAQ (<http://www.openbsd.org/faq/fr/faq10.html#HTTPS>).

D'après ce que j'ai compris (et après quelques tests), il faut
impérativement utiliser des hôtes virtuels déterminés par adresse IP
(IP-based vhost), et j'ai donc créé des alias pour l'unique interface
réseau dont le serveur web est équipé, toujours en suivant la FAQ
(<http://www.openbsd.org/faq/fr/faq6.html#Setup.aliases>).

# ifconfig -A
               [...]
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:06:29:2e:ab:3d
        priority: 0
        groups: egress
        media: Ethernet autoselect (100baseTX full-duplex)
        status: active
        inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::206:29ff:fe2e:ab3d%fxp0 prefixlen 64 scopeid 0x1
        inet 192.168.1.2 netmask 0xffffffff broadcast 192.168.1.2
        inet 192.168.1.3 netmask 0xffffffff broadcast 192.168.1.3
        inet 192.168.1.4 netmask 0xffffffff broadcast 192.168.1.4


Jusqu'ici, j'ai toujours fonctionné avec des vhosts déterminés par nom
d'hôte ; tous mes vhosts ont toujours ressemblé à ceci :

<VirtualHost *:80>

  ServerName www.mouet-mouet.net
  ServerAlias mouet-mouet.net
  ServerAdmin [hidden email]
  ServerSignature Off
  DocumentRoot "/var/www/www.mouet-mouet.net"

  ErrorLog logs/www.mouet-mouet.net/error_log
  CustomLog logs/www.mouet-mouet.net/access_log combined

  <Directory "/var/www/www.mouet-mouet.net">
    Options FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
  </Directory>

</VirtualHost>

Le reste de la configuration est exactement la configuration par défaut
de l'Apache d'OpenBSD (je n'ai touché à rien, ni aux directives Listen
et Bind Address, ni à quoi que ce soit d'autre).

J'ai lutté une bonne partie de la nuit pour créer des hôtes virtuels
déterminés par adresse IP, mais rien n'a fonctionné, même sans SSL.

Comment faire ? :)

(Petite précision : je dispose d'un PF placé juste devant le serveur.
S'il faut faire mumuse avec relayd(8) pour atteindre mon objectif,
c'est tout-à-fait possible, mais il faudrait alors m'indiquer un point
de départ...)


Cordialement,
Maxime

--
Maxime DERCHE
GnuPG public key ID : 0x9A85C4C0
(fingerprint : 0FDC 16AF 5A5B 1908 786C  2B85 2D3C C83E 9A85 C4C0)
http://www.mouet-mouet.net/maxime/blog/index.php

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Nicolas Bernard-2
[...]

> Jusqu'ici, j'ai toujours fonctionné avec des vhosts déterminés par nom
> d'hôte ; tous mes vhosts ont toujours ressemblé à ceci :
>
> <VirtualHost *:80>
>
>   ServerName www.mouet-mouet.net
>   ServerAlias mouet-mouet.net
>   ServerAdmin [hidden email]
>   ServerSignature Off
>   DocumentRoot "/var/www/www.mouet-mouet.net"
>
>   ErrorLog logs/www.mouet-mouet.net/error_log
>   CustomLog logs/www.mouet-mouet.net/access_log combined
>
>   <Directory "/var/www/www.mouet-mouet.net">
>     Options FollowSymLinks
>     AllowOverride all
>     Order allow,deny
>     Allow from all
>   </Directory>
>
> </VirtualHost>
>
>
> J'ai lutté une bonne partie de la nuit pour créer des hôtes virtuels
> déterminés par adresse IP, mais rien n'a fonctionné, même sans SSL.
>
> Comment faire ? :)

Bonjour,

(Avertissement: je n'ai jamais fait ça exactement, mais voici comment je
procéderais.)

Pourquoi ne pas créer tes vhosts avec des noms comme d'habitude et
donner une adresse différente à chacun au niveau du DNS?

Après, il faut que tu configures Apache pour qu'il utilise un certificat
par IP (et non par vhost, même si c'est à ça que ça va revenir).

Amicalement,
N.

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/ml

Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Julien Escario
In reply to this post by Maxime DERCHE-3
Maxime DERCHE a écrit :
> Bonjour à toutes et tous,

Bonjour,

[...]

> D'après ce que j'ai compris (et après quelques tests), il faut
> impérativement utiliser des hôtes virtuels déterminés par adresse IP
> (IP-based vhost), et j'ai donc créé des alias pour l'unique interface
> réseau dont le serveur web est équipé, toujours en suivant la FAQ
> (<http://www.openbsd.org/faq/fr/faq6.html#Setup.aliases>).
>
> # ifconfig -A
>                [...]
> fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         lladdr 00:06:29:2e:ab:3d
>         priority: 0
>         groups: egress
>         media: Ethernet autoselect (100baseTX full-duplex)
>         status: active
>         inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
>         inet6 fe80::206:29ff:fe2e:ab3d%fxp0 prefixlen 64 scopeid 0x1
>         inet 192.168.1.2 netmask 0xffffffff broadcast 192.168.1.2
>         inet 192.168.1.3 netmask 0xffffffff broadcast 192.168.1.3
>         inet 192.168.1.4 netmask 0xffffffff broadcast 192.168.1.4
>
>
> Jusqu'ici, j'ai toujours fonctionné avec des vhosts déterminés par nom
> d'hôte ; tous mes vhosts ont toujours ressemblé à ceci :

Je ne sais pas comment tu configures ton adressage mais le protocole SSL a une
limitation de taille : il te faut une adresse IP publique par certificat SSL.

Dans ce que tu montres, tu sembles créer une IP RFC1918 (privée) par vhost :
même si Apache accepte la configuration, tu aura toujours un avertissement
disant que le certificat n'est pas valide (et un second si le certificat n'est
pas dans la chaîne de confiance).
Il faudrait donc que ton pf fasse du NAT 1:1.

A moins, bien sûr que tu y accèdes exclusivement en interne mais là, je ne vois
plus l'intérêt du SSL.

Bonne journée,
Julien

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/ml

Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Maxime DERCHE-3

Re,

On Mon, 14 Sep 2009 08:32:43 +0200
Julien Escario <[hidden email]> wrote:

> Je ne sais pas comment tu configures ton adressage mais le protocole
> SSL a une limitation de taille : il te faut une adresse IP publique
> par certificat SSL.
>
> Dans ce que tu montres, tu sembles créer une IP RFC1918 (privée) par
> vhost : même si Apache accepte la configuration, tu aura toujours un
> avertissement disant que le certificat n'est pas valide (et un second
> si le certificat n'est pas dans la chaîne de confiance).
> Il faudrait donc que ton pf fasse du NAT 1:1.

Je ne dispose que d'une seule et unique adresse IP publique, détenue
par l'interface du routeur qui est reliée à ma Freebox.

Cela signifierait-il qu'il est strictement impossible de procéder
autrement qu'avec un certificat multi-domaine ?

> A moins, bien sûr que tu y accèdes exclusivement en interne mais là,
> je ne vois plus l'intérêt du SSL.

Non, le but est bien entendu de proposer un accès SSL depuis
l'extérieur...


Cordialement,
Maxime

--
Maxime DERCHE
GnuPG public key ID : 0x9A85C4C0
(fingerprint : 0FDC 16AF 5A5B 1908 786C  2B85 2D3C C83E 9A85 C4C0)
http://www.mouet-mouet.net/maxime/blog/index.php

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Maxime DERCHE-3
In reply to this post by Nicolas Bernard-2
Re,

On Mon, 14 Sep 2009 07:14:12 +0200
Nicolas Bernard
<[hidden email]>
wrote:

> Bonjour,
>
> (Avertissement: je n'ai jamais fait ça exactement, mais voici comment
> je procéderais.)
>
> Pourquoi ne pas créer tes vhosts avec des noms comme d'habitude et
> donner une adresse différente à chacun au niveau du DNS?

Je ne dispose que d'une seule et unique adresse IP publique (Freebox +
NAT), sur laquelle pointent tous mes enregistrement DNS...


Cordialement,
Maxime

--
Maxime DERCHE
GnuPG public key ID : 0x9A85C4C0
(fingerprint : 0FDC 16AF 5A5B 1908 786C  2B85 2D3C C83E 9A85 C4C0)
http://www.mouet-mouet.net/maxime/blog/index.php

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Denis Fondras
In reply to this post by Maxime DERCHE-3
Maxime DERCHE a écrit :
>
> Je ne dispose que d'une seule et unique adresse IP publique, détenue
> par l'interface du routeur qui est reliée à ma Freebox.
>
> Cela signifierait-il qu'il est strictement impossible de procéder
> autrement qu'avec un certificat multi-domaine ?
>

Tu as regardé du côté de mod_gnutls ?
Si vraiment tu as besoin de faire du multi-domaine...

Denis

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/ml

Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Mattieu Baptiste-2
In reply to this post by Maxime DERCHE-3
2009/9/14 Maxime DERCHE <[hidden email]>:

> Re,
>
> On Mon, 14 Sep 2009 07:14:12 +0200
> Nicolas Bernard
> <[hidden email]>
> wrote:
>
>> Bonjour,
>>
>> (Avertissement: je n'ai jamais fait ça exactement, mais voici comment
>> je procéderais.)
>>
>> Pourquoi ne pas créer tes vhosts avec des noms comme d'habitude et
>> donner une adresse différente à chacun au niveau du DNS?
>
> Je ne dispose que d'une seule et unique adresse IP publique (Freebox +
> NAT), sur laquelle pointent tous mes enregistrement DNS...

La solution propre serait d'utiliser apache 2.2 depuis les ports, qui
supporte le SNI (Server Name Indication).
Tu pourras alors configurer un certificat par virtual host.

Tous les navigateurs modernes gèrent cette option donc tout devrait rouler.

--
Mattieu Baptiste
"/earth is 102% full ... please delete anyone you can."

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/ml

Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Maxime DERCHE-3
In reply to this post by Denis Fondras
Re,

On Mon, 14 Sep 2009 19:50:43 +0200
Denis Fondras <[hidden email]> wrote:

> Tu as regardé du côté de mod_gnutls ?
> Si vraiment tu as besoin de faire du multi-domaine...

Bof, j'aimerais autant rester avec ce qui est en base, et mod_gnutls
(que je ne connaissais pas du tout, merci de l'avoir porté à mon
attention) a besoin d'Apache2 pour fonctionner...

N'y aurait-il pas moyen de lier chaque vhost à une adresse IP privée
(alias de l'unique adresse IP du serveur web) et d'utiliser un
programme (relayd(8) ?) qui redirigerait les connexions d'un vhost vers
la bonne adresse IP (un peu comme ce qui est indiqué sur [1] mais sans
l'aspect balance de charge) ? Je veux dire, cela a-t-il une chance de
fonctionner ? :)

[1] : <https://calomel.org/relayd.html>


Cordialement,
Maxime

--
Maxime DERCHE
GnuPG public key ID : 0x9A85C4C0
(fingerprint : 0FDC 16AF 5A5B 1908 786C  2B85 2D3C C83E 9A85 C4C0)
http://www.mouet-mouet.net/maxime/blog/index.php

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Philippe Schwarz
Maxime DERCHE a écrit :

> Re,
>
> On Mon, 14 Sep 2009 19:50:43 +0200
> Denis Fondras <[hidden email]> wrote:
>
>> Tu as regardé du côté de mod_gnutls ?
>> Si vraiment tu as besoin de faire du multi-domaine...
>
> Bof, j'aimerais autant rester avec ce qui est en base, et mod_gnutls
> (que je ne connaissais pas du tout, merci de l'avoir porté à mon
> attention) a besoin d'Apache2 pour fonctionner...
>
> N'y aurait-il pas moyen de lier chaque vhost à une adresse IP privée
> (alias de l'unique adresse IP du serveur web) et d'utiliser un
> programme (relayd(8) ?) qui redirigerait les connexions d'un vhost vers
> la bonne adresse IP (un peu comme ce qui est indiqué sur [1] mais sans
> l'aspect balance de charge) ? Je veux dire, cela a-t-il une chance de
> fonctionner ? :)
>
> [1] : <https://calomel.org/relayd.html>
>
>
> Cordialement,
> Maxime
>
Seule solution - que j'ai déja utilisée - mettre des ports TCP
différents par serveurs virtuels.
Ce n'est :
- Pas standard
- Pas compatible avec tous les FW
- Pas mémorisable par l'utilisateur standard
Mais ca marche avec 1 seule @IP.
...
Mes 2 cents.

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/ml

Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Mattieu Baptiste-2
In reply to this post by Maxime DERCHE-3
2009/9/14 Maxime DERCHE <[hidden email]>:

> Re,
>
> On Mon, 14 Sep 2009 19:50:43 +0200
> Denis Fondras <[hidden email]> wrote:
>
>> Tu as regardé du côté de mod_gnutls ?
>> Si vraiment tu as besoin de faire du multi-domaine...
>
> Bof, j'aimerais autant rester avec ce qui est en base, et mod_gnutls
> (que je ne connaissais pas du tout, merci de l'avoir porté à mon
> attention) a besoin d'Apache2 pour fonctionner...
>
> N'y aurait-il pas moyen de lier chaque vhost à une adresse IP privée
> (alias de l'unique adresse IP du serveur web) et d'utiliser un
> programme (relayd(8) ?) qui redirigerait les connexions d'un vhost vers
> la bonne adresse IP (un peu comme ce qui est indiqué sur [1] mais sans
> l'aspect balance de charge) ? Je veux dire, cela a-t-il une chance de
> fonctionner ? :)

Ça ne fait que déplacer le problème. La question est comment relayd
fait pour savoir quel certificat présenter au client. De la même
manière qu'apache doit avoir un moyen de savoir quel certificat
présenter au client.

Hors, au niveau TLS, au moment où la connexion SSL se fait, apache (ou
relayd) ne peut pas savoir quel certificat présenter, puisque la
connexion se fait toujours a destination de la même IP.

C'est pour cela que le SNI existe et est supporté à partir d'apache
2.2 : cela permet au navigateur, au moment de l'établissement de la
connexion SSL, d'indiquer sur quel virtualhost on veut se connecter.

>
> [1] : <https://calomel.org/relayd.html>
>
>
> Cordialement,
> Maxime
>
> --
> Maxime DERCHE
> GnuPG public key ID : 0x9A85C4C0
> (fingerprint : 0FDC 16AF 5A5B 1908 786C  2B85 2D3C C83E 9A85 C4C0)
> http://www.mouet-mouet.net/maxime/blog/index.php
>



--
Mattieu Baptiste
"/earth is 102% full ... please delete anyone you can."

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/ml

Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Maxime DERCHE-3
In reply to this post by Mattieu Baptiste-2

Bonjour,

On Mon, 14 Sep 2009 20:12:29 +0200
Mattieu Baptiste <[hidden email]> wrote:

> La solution propre serait d'utiliser apache 2.2 depuis les ports, qui
> supporte le SNI (Server Name Indication).
> Tu pourras alors configurer un certificat par virtual host.

*Merci.*

Après recompilation d'OpenSSL, de la totalité de /sbin/ (j'ignore si
cela était réellement nécessaire, mais j'ai suivi le patch 001 pour
4.5), d'Apache2 et de PHP5 (core et extensions), tout fonctionne, c'est
merveilleux.

Par contre, cela ne fonctionne pas par défaut quand on compile le port,
car OpenSSL n'est pas compilé avec la bonne option.
Il faut aller dans /usr/src/lib/libssl/src/Makefile ajouter option
enable-tlsext [1] dans les options de compilation, puis recompiler
OpenSSL (j'ai suivi les directives du patch 001 d'OpenBSD 4.5 [2] qui
préconise de recompiler tout /usr/src/sbin/), et recompiler Apache2 pour
qu'il prenne en compte l'option ajoutée à OpenSSL.


Par contre après tout fonctionne immédiatement : les vhosts HTTPS sont
automatiquement reconnus, exactement comme pour les vhosts HTTP. Que du
bonheur.

Merci encore. :)

[1] : http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
[2] :
ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.5/common/001_openssl.patch


> Tous les navigateurs modernes gèrent cette option donc tout devrait
> rouler.

Apparemment c'est encore plutôt récent, mais on ne s'attend pas à ce
qu'un visiteur utilisant IE6 soit intéressé par l'usage de HTTPS quand
il visite mouet-mouet.net...


Cordialement,
Maxime

--
Maxime DERCHE
GnuPG public key ID : 0x9A85C4C0
(fingerprint : 0FDC 16AF 5A5B 1908 786C  2B85 2D3C C83E 9A85 C4C0)
http://www.mouet-mouet.net/maxime/blog/index.php

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Hôtes virtuels Apache + SSL

Ghislain FOURNIER

Bonjour,

tu pourrai nous faire une petit procedure ?

merci d'avance.

Ghislain.




> Message du 16/09/09 07:33
> De : "Maxime DERCHE"
> A : [hidden email]
> Copie à :
> Objet : Re: [obsdfr-misc] Hôtes virtuels Apache + SSL
>
>
> Bonjour,
>
> On Mon, 14 Sep 2009 20:12:29 +0200
> Mattieu Baptiste wrote:
>
> > La solution propre serait d'utiliser apache 2.2 depuis les ports, qui
> > supporte le SNI (Server Name Indication).
> > Tu pourras alors configurer un certificat par virtual host.
>
> *Merci.*
>
> Après recompilation d'OpenSSL, de la totalité de /sbin/ (j'ignore si
> cela était réellement nécessaire, mais j'ai suivi le patch 001 pour
> 4.5), d'Apache2 et de PHP5 (core et extensions), tout fonctionne, c'est
> merveilleux.
>
> Par contre, cela ne fonctionne pas par défaut quand on compile le port,
> car OpenSSL n'est pas compilé avec la bonne option.
> Il faut aller dans /usr/src/lib/libssl/src/Makefile ajouter option
> enable-tlsext [1] dans les options de compilation, puis recompiler
> OpenSSL (j'ai suivi les directives du patch 001 d'OpenBSD 4.5 [2] qui
> préconise de recompiler tout /usr/src/sbin/), et recompiler Apache2 pour
> qu'il prenne en compte l'option ajoutée à OpenSSL.
>
>
> Par contre après tout fonctionne immédiatement : les vhosts HTTPS sont
> automatiquement reconnus, exactement comme pour les vhosts HTTP. Que du
> bonheur.
>
> Merci encore. :)
>
> [1] : http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
> [2] :
> ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.5/common/001_openssl.patch
>
>
> > Tous les navigateurs modernes gèrent cette option donc tout devrait
> > rouler.
>
> Apparemment c'est encore plutôt récent, mais on ne s'attend pas à ce
> qu'un visiteur utilisant IE6 soit intéressé par l'usage de HTTPS quand
> il visite mouet-mouet.net...
>
>
> Cordialement,
> Maxime
>
> --
> Maxime DERCHE
> GnuPG public key ID : 0x9A85C4C0
> (fingerprint : 0FDC 16AF 5A5B 1908 786C 2B85 2D3C C83E 9A85 C4C0)
> http://www.mouet-mouet.net/maxime/blog/index.php
>
>
> [ (pas de nom de fichier) (0.2 Ko) ]