Forum Linux.mandriva Vhost sur port 443 & 80 sur un même serveur apache 2.0.

Posté par  (site web personnel) .
Étiquettes :
0
18
jan.
2005
Bonjour,

ayant configuré mon Apache avec des Vhost SSL & non-SSL

je n'arrive pas à accéder à mon vhost HTTPS (il n'y en a qu'un seul Vhost SSL car j'ai cru comprendre que le apache2-mod_ssl n'était pas fait pour : vérité, mensonge ? Je suis preneur si quelqu'un a l'info.).

Voici le log que j'obtient si je tente d'accéder au vhost https :

# tail -f /var/log/httpd/access_log
82.126.66.133 - - [18/Jan/2005:17:47:35 +0100] "\x80g\x01\x03" 200 40 "-" "-"


Mon navigateur (Firefox) me répond ceci :
«The connection to willou.net has terminated unexpectedly. Some data may have been transfered.»

Je lis dans google que cela viendrait d'un soucis au niveau du certificat ou de la clé SSL. J'en doute car lorsque que je commente toutes les déclarations de Vhost présents sur le port 80, le soucis ne se pose plus.

Voici de plus amples éléments :

# grep -v ^# /etc/httpd/conf/vhosts/Vhosts.conf |grep -v ^$
NameVirtualHost 82.xxx.xxx.xx
<VirtualHost 82.xxx.xxx.xx>
ServerName willou.net
DocumentRoot /www/willou.net
ServerAdmin xxx@xxx.net
ErrorLog /www/logs/willou.net-error_log
</VirtualHost>
<VirtualHost 82.xxx.xxx.xx>
ServerName salsa-nantes.com
DocumentRoot /www/salsa-nantes.com
ServerAdmin xxx@xxx.com
ErrorLog /www/logs/salsa-nantes.com-error_log
</VirtualHost>


# grep -v ^# /etc/httpd/conf.d/41_mod_ssl.default-vhost.conf |grep -v ^$
<IfDefine HAVE_SSL>
<IfModule !mod_ssl.c>
LoadModule ssl_module extramodules/mod_ssl.so


<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot "/var/www/html/admin"
ErrorLog logs/ssl_error_log
<IfModule mod_log_config.c>
TransferLog logs/ssl_access_log

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /etc/ssl/apache2/server.crt
SSLCertificateKeyFile /etc/ssl/apache2/server.key
<Files ~ "\.(cgi|shtml|phtml|php?)$">
SSLOptions +StdEnvVars

<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars

<IfModule mod_setenvif.c>
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

<IfModule mod_log_config.c>
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteOptions inherit

</VirtualHost>


Ces deux fichiers sont inclus dans la configuration de mon apache, voici les version en présences :
# rpm -qa |grep apache
apache2-2.0.50-7.2.101mdk
apache2-mod_ssl-2.0.50-4.1.101mdk
[...]


N.B : aucune erreur dans les logs au lancement sur les certificats ou les clés SSL utilisées.

Je suis donc en quête d'une piste pour régler mon soucis.

Cordialement,
David «Willou»
  • # Confirmation

    Posté par  . Évalué à 2.

    Effectivement, il n'est pas possible d'avoir de virtualhost pour un serveur sécurisé si l'on ne dispose pas de plusieurs IP ou si l'on n'utilise pas des ports différents.

    Explications:
    En mode non-sécurisé, pour acceder à un virtualhost particulier, un champ Host: est envoyé du client vers le serveur dans la requête HTTP (cela ne peut pas être fait au niveau plus haut qui est TCP/IP -> on ne raisonne qu'en terme d'adresses IP)

    En mode sécurisé, avant tout envoi de la requête, il faut établir un canal chiffré et pour cela on utilise un certificat. Et comme on n'a encore rien envoyé, le serveur ne peut pas choisir le certificat en fonction de l'Host. En outre, un certificat est spécifique à un hôte et donc les navigateurs refusent généralement d'aller sur un site dont le champ Host du certificat ne correspond pas à celui de l'url.

    Cette limitation n'est donc pas spécifique à Apache

    Par contre, il est tout à fait possible d'avoir un serveur SSL en même temps que plusieurs virtualhosts classiques.
    • [^] # Re: Confirmation

      Posté par  (site web personnel) . Évalué à 1.

      J'ai eu oui dire qu'il était possible d'avoir plusieurs Vhost mais avec apache-sll, est vrai ?
      Si c'est le cas, j'ai cru lire qu'un fork de Apache-ssl était mod_ssl, proposerait-il la possibilité d'avoir plusieurs vhost (en SSL) ?
      • [^] # Re: Confirmation

        Posté par  (site web personnel) . Évalué à 1.

        Ecoute ce qu'il te dit le monsieur :)
        Ce n'est pas possible, ce n'est pas à cause d'apache, c'est une couche en dessous que ca se passe !

        Si tu veux du SSL pour chacun de tes sites, en gardant la même ip, et le même port, tu peux imaginer un truc du genre:
        pour willou.net: https://willou.net/secure/willou.net/(...)
        pour salsa-nantes.net: https://willou.net/secure/salsa-nantes.net/(...)
        etc...
      • [^] # Re: Confirmation

        Posté par  . Évalué à 1.

        mod_ssl était un module pour Apache 1.3 pour obtenir un serveur SSL (l'autre solution étant un jeu de patches à appliquer sur directement sur les sources). Depuis Apache 2.0, c'est devenu un module officiel maintenu par Apache.

        Et en ce qui concerne la possibilité d'avoir plusieurs name-based virtualhosts en SSL : C'est une impossibilité technique (cf entre autre la FAQ de mod_ssl : http://www.modssl.org/docs/2.8/ssl_faq.html#ToC47(...))
        • [^] # Re: Confirmation

          Posté par  (site web personnel) . Évalué à 1.

          C'est effectivement ce que j'avais cru lire malheureusement. J'espérais tout de même qu'une autre alternative existait. Tant pis pour moi & merci pour vos indications.
      • [^] # Re: Confirmation

        Posté par  . Évalué à 2.

        Le commentaire de Laurent Goujon est vrai dans le sens ou on ne peut avoir qu'un seul certificat par couple ip/port, mais il est possible de mettre autant de vhosts que tu le souhaites sur ce canal crypté. Tu auras droit à une remarque désobligeante du navigateur parce que le certificat ne correspondra pas toujours au site demandé.
        (du moins chezmoicamarche avec apache-ssl)

        NameVirtualHost www:80
        NameVirtualHost www:443

        <VirtualHost www:80>
        Include /etc/apache-ssl/vhosts/vhost1
        </VirtualHost>
        <VirtualHost www:443>
        SSLEnable
        Include /etc/apache-ssl/vhosts/vhost1
        </VirtualHost>

        <VirtualHost www:80>
        Include /etc/apache-ssl/vhosts/vhost2
        </VirtualHost>
        <VirtualHost www:443>
        SSLEnable
        Include /etc/apache-ssl/vhosts/vhost2
        </VirtualHost>
  • # Name-based Virtualhosts

    Posté par  . Évalué à 1.

    Si j'ai bien compris ce que tu souhaites faire, tu souhaites avoir plusieurs virtualhosts définis à partir de leur nom dont un SSL

    Le problème, c'est que tu ne précises pas le port de premiers virtualhosts, et ceux-ci s'appliquent donc sur tous les ports sur lesquels écoute Apache. Comme Apache utilise le premier virtualhost qui convient, tu obtiens d'un côté un client qui cherche à établir une communication chiffrée avec un virtualhost qui n'en est pas capable.

    Je te conseille donc de modifier légèrement ta configuration, en particulier de Vhosts.conf en utilisant :

    <VirtualHost 82.x.x.x:80>
    </VirtualHost>

    Plus d'infos dans la doc Apache :
    http://httpd.apache.org/docs-2.0/vhosts/name-based.html(...)
    • [^] # Re: Name-based Virtualhosts

      Posté par  (site web personnel) . Évalué à 1.

      Si je configure mes Vhost du port 80 ainsi :

      NameVirtualHost 82.xxx.xxx.xx
      <VirtualHost 82.xxx.xxx.xx:80>
      ServerName willou.net
      DocumentRoot /www/willou.net
      ServerAdmin xxx@xxx.net
      ErrorLog /www/logs/willou.net-error_log
      </VirtualHost>



      nb: Donc avec la mention ":80", voici ce que me dis apache sur un rechargement de la configuration (# apachectl graceful) :

      [Wed Jan 19 00:19:18 2005] [error] VirtualHost 82.231.146.58:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results


      Si ensuite je fait :
      NameVirtualHost 82.xxx.xxx.xx:80
      <VirtualHost 82.xxx.xxx.xx:80>
      ServerName willou.net
      DocumentRoot /www/willou.net
      ServerAdmin xxx@xxx.net
      ErrorLog /www/logs/willou.net-error_log
      </VirtualHost>


      Alors mes pages ne chargent plus sur aucun de mes nom de domaines. Je n'ai même pas d'erreur pour joindre le serveur ou de timeout (ou je n'ai pas attentu suffisement longtemps, ceci dis j'ai eu le temps d'écrire tout ça et je n'ai toujours pas d'erreur). Aucun message d'erreur n'apparaît dans mes logs.
      Que ça soit sur le port 443 ou le port 80.

      Je reste donc dans l'impasse.
      • [^] # Re: Name-based Virtualhosts

        Posté par  . Évalué à 1.

        Une petite idée...

        Je pense que le problème vient que tu spécifies ton adresse IP 82.x.x.x . Il se trouve que moi aussi j'ai un serveur Apache sur une passerelle avec d'un côté mon réseau privé en 192.168.x.x et de l'autre une adresse IP fourni par mon FAI 82.y.y.y

        Avec ta configuration, si j'essaie de me connecter à mon serveur depuis le réseau interne, je vais faire une requete vers une adresse du type 192.168.x.x alors que dans ma configuration je spécifie de ne répondre que si l'adresse demandée est 82.y.y.y -> Apache ne renverra donc rien

        Par contre, si je remplace dans ma config Apache, 82.y.y.y par *, là cela marchera parce qu'Apache répondra quelquesoit l'adresse IP.

        Donc en résumé, ma config deviendrait :


        NameVirtualHost *:80
        <VirtualHost *:80>
        ServerName willou.net
        DocumentRoot /www/willou.net
        ServerAdmin xxx@xxx.net
        ErrorLog /www/logs/willou.net-error_log
        </VirtualHost>

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.