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 Laurent Go . Évalué à 2.
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 Willou (site web personnel) . Évalué à 1.
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 tito (site web personnel) . Évalué à 1.
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 Laurent Go . Évalué à 1.
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 Willou (site web personnel) . Évalué à 1.
[^] # Re: Confirmation
Posté par Olivier Guerrier . Évalué à 2.
(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 Laurent Go . Évalué à 1.
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 Willou (site web personnel) . Évalué à 1.
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 Laurent Go . Évalué à 1.
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.