So leiten Sie https-Anfragen basierend auf dem Hostnamen an einen anderen Host weiter

So leiten Sie https-Anfragen basierend auf dem Hostnamen an einen anderen Host weiter

Meine Situation:

Ich habe drei Ubuntu-Server, einen NAT-Router, drei Domänennamen und drei Apache-Websites. Die IP-Adressen der beiden Domänen sind die WAN-IP für den NAT-Router. Der gesamte HTTPS-Verkehr aus dem Internet wird an Server 1 weitergeleitet. Jeder Server hat sein eigenes Zertifikat für seine eigene Website.

Jemand versucht eine Verbindung herzustellen:

Wenn der angeforderte Hostname der Hostname für Website 1 ist, zeigt Server 1 Website 1 an. Wenn der angeforderte Hostname für Website 2 oder 3 ist, leitet Server 1 die Verbindung an Server 2 oder 3 weiter. Server 2 oder 3 zeigt Website 2 oder 3 an.

Denken Sie daran, dass Server 1 nicht über die Schlüssel für Server 2 oder 3 verfügt.

Ich habe zwei Fragen.

  1. Ist dies möglich, ohne dass Fehler wie bei „Man-in-the-Middle“ auftreten?
  2. So bearbeiten Sie die Apache-Konfiguration, damit dies funktioniert.

Forschung:

Ich habe bei Google gesucht, wie man HTTPS-Anfragen an andere HTTPS-Hosts weiterleitet. Die meisten Antworten sind, dass Server 1 alle öffentlichen Zertifikate und Schlüssel hat und dass Sie ein weiteres Zertifikat und einen weiteren Schlüssel für Server 2 oder 3 erstellen müssen. (In meinem Fall ein selbst signiertes Zertifikat). Aber ich möchte nicht, dass Server 1 den privaten Schlüssel für Server 2 oder 3 hat. Da die öffentliche IP für Server 1, 2 oder 3 dieselbe ist, ist es möglich, dass Server 1 nicht über die privaten Schlüssel verfügt.

Ich habe auch herausgefunden, wie man mehrere https-virtuelle Hosts mit unterschiedlichen Zertifikaten auf einem Server haben kann. Nein, weil jeder Server seine eigene Website hat.

Kann mir jemand helfen?

Antwort1

Dies kann erreicht werden durch den Einsatz von ApachesReverse-ProxyFunktion. In der Apache-Konfiguration von Server 1 würden Sie VirtualHostDefinitionen mit den Hostnamen und SSL-Konfigurationen für die Sites auf Server 2 und 3 erstellen, die ProxyPassverwendet werden, um die Verbindungen über Server 1 zurück zu diesen Servern zu leiten.

Eine alternative Methode wäre, etwas wie NGINX vor allen drei Servern laufen zu lassen, Ihren HTTP/HTTPS-Verkehr per NAT auf NGINX zu übertragen und es so zu konfigurieren, dass es SSL-Terminierung durchführt undReverseproxyfür alle drei Server.

verwandte Informationen