Apache Nom de l'hôte virtuel avec SSL
-
21-08-2019 - |
Question
Je tente d'installer nos serveurs pour autoriser le trafic via le protocole SSL. Je suis conscient que SSL ne fonctionne pas avec nom d'hôte virtuel, mais nous avons tous nos serveurs apache sur les machines virtuelles avec les adresses IP privées dédiées. Nous avons une machine virtuelle primaire qui a la configuration mod_proxy pour acheminer le trafic vers la vms appropriée.
Cependant, pour acheminer le trafic https nous avons besoin d'avoir le certificat installé sur le proxy ainsi que les PMV. Nous avons un certificat générique qui peut être utilisé dans tous nos hôtes. Tout semble fonctionner correctement, mais je reçois ce qui suit dans les journaux apache pour le proxy:
[warn] Init: serveur SSL IP / Conflit de port: host1.domain.com:443 (/ etc / apache2 / sites-enabled / host1: 1) par rapport à host2.domain.com:443 (/ etc / apache2 / sites activés / host2: 1)
Il est l'un des messages d'erreur pour chaque hôte, nous avons mis en place sur le proxy. Notre configuration de l'hôte virtuel pour le proxy est affiché ci-dessous:
<VirtualHost ipaddress:443>
ServerName host1.domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://privateip:443/
ProxyPassReverse / https://privateip:443/
SSLProxyEngine on
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
Est-il possible que je puisse obtenir ce travail?
La solution
On dirait que Apache vous avertit que vous avez plusieurs sections avec le même <VirtualHost>
adresse IP et le port ... dans la mesure où la faire fonctionner sans avertissement préalable, je pense que vous auriez besoin d'utiliser quelque chose comme Nom du serveur Indication (SNI), un moyen d'identifier le nom d'hôte demandé dans le cadre de la négociation SSL. Fondamentalement, il vous permet de faire l'hébergement virtuel basé sur le nom sur SSL, mais je ne sais pas à quel point il est pris en charge par les navigateurs. Autre que quelque chose comme SNI, vous êtes essentiellement limité à un nom de domaine activé SSL pour chaque adresse IP que vous exposez à l'Internet.
Bien sûr, si vous êtes en mesure d'accéder aux sites correctement, vous serez probablement bien ignorer les avertissements. Ces particuliers ne sont pas les très graves - ils sont principalement une indication de ce qu'il faut regarder si vous rencontrez des problèmes
Autres conseils
Pour autant que je sache, Apache prend en charge depuis la version 2.2.12 SNI Malheureusement, la documentation ne reflète pas encore ce changement.
Optez pour http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI jusqu'à c'est fini
Vous pourrez peut-être remplacer le:
VirtualHost ipaddress:443
avec
VirtualHost *:443
Vous avez probablement todo cela sur tous vos hôtes virt.
Il sera probablement éclaircir ce message. Laissez la directive ServerName inquiétude au sujet de la demande de routage de message.
Encore une fois, vous ne pouvez pas être en mesure de le faire si vous avez des alias de plusieurs IP sur la même machine.
Le VirtualHost ressemblerait à ceci:
NameVirtualHost IP_Address:443
<VirtualHost IP_Address:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt # Where "ca" is the name of the Certificate
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
ServerAdmin webmaster@domain_name.com
DocumentRoot /var/www/html
ServerName www.domain_name.com
ErrorLog logs/www.domain_name.com-error_log
CustomLog logs/www.domain_name.com-access_log common
</VirtualHost>
Apache ne supporte pas le protocole SSL sur l'hôte virtuel basé sur le nom, uniquement sur les hôtes virtuels basés sur IP.
Source: Apache 2.2 SSL FAQ question Pourquoi est-il pas possible de utilisation de serveurs virtuels-basé sur le nom d'identifier les différents hôtes virtuels SSL?
Contrairement à SSL, la spécification TLS permet (comme mentionné par quelqu'un d'autre SNI) pour les hôtes à base de nom, mais Apache ne supporte pas encore cette fonctionnalité. Il supposément dans une version future lors de la compilation contre OpenSSL 0.9.8.
En outre, mod_gnutls prétend soutenir SNI, mais je ne l'ai jamais fait essayé.
Vous devez d'abord ip NameVirtualHost: 443 dans votre fichier config! Vous avez probablement l'un avec 80 à la fin, mais vous aurez également besoin d'un 443.
Deuxièmement, vous avez besoin d'un certificat * de .domaine (générique) (il est possible de faire un)
Troisièmement, vous pouvez fabriquer des toiles que de something.domain dans une ip (à cause du certificat)
Vous devez ajouter ci-dessous une partie pour activer la fonctionnalité avec IP NameVirtualHost
donné.
NameVirtualHost IP_Address:443