Nginx SSL Weiterleitung ohne SSL für AliasDomains

HayKer

Cadet 3rd Year
Registriert
Feb. 2009
Beiträge
57
Hallo liebe Community,

Das Problem:
Aktuell stehe ich vor einem großen Problem.
Wir möchten eine Webseite hosten die mit SSL verschlüsselt ist. Soweit so gut, die Webseite hat aber noch AliasDomains die auf die HaubtDomain zeigen sollen und dementsprechend auf die HaubtDomain weiterleiten soll.
Bis dahin ist das eigentlich auch kein Problem.
Das Problem ist folgendes:
wenn man jetzt eine AliasDomain MIT SSL aufruft, wird logischerweise ein Fehler ausgegeben weil das Zertifikat nicht zur Domain passt.
Das Schlimmste ist, wenn mehrere Projekte auf einem Server laufen, wird irgendein SSL eines Projekts aufgerufen. Das darf auf keinen Fall passieren. Wenn man den Fehler überspringt wird auf ein falsches Projekt weitergeleitet.

Aufbau unseres Servers / Netzwerks:
Da wir besonders darauf achten so wenig IP's wie möglich zu verbrauchen, wir wissen ja das keine mehr frei sind und langsam teuer werden, versuchen wir das ganze über nur eine einzige IP zu regeln.

Der Netzaufbau sieht aktuell so aus:
Netz.JPG

Der Loadbalancer benutzt Nginx und leitet eine Webseite an den richtigen Server.
Nur der Loadbalancer übergibt nach außen hin das SSL Zertifikat, intern wird alles nur über http übertragen.
Funktioniert 1A.

Die Konfiguration:
Jetzt kommen wir mal zum Herzstück. (Default Konfiguration ist Standard)
Hier im Beispiel mit,
Haubtdomain: testdomain.de = www.testdomain.de
AliasDomains: testdomain2.de, test2domain.de

LB Konfiguration testdomain.de:
Code:
server {
	listen 80;
	server_name testdomain2.de www.testdomain2.de test2domain.com www.test2domain.com;
	return 301 https://www.testdomain.de/;
}
server {
    listen 80;
    server_name www.testdomain.de testdomain.de;
    access_log /var/log/nginx/www.testdomain.de.access.log;
	return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name www.testdomain.de testdomain.de;
    ssl_certificate /etc/ssl/testdomain/testdomain.de.pem;
    ssl_certificate_key /etc/ssl/testdomain/testdomain.de.key;
    ssl_session_cache shared:SSL:10m;
    location / {
        proxy_pass http://lokaleipwebserver/;
        proxy_redirect default;
    }
}

Webserver Konfiguration testdomain.de:
Code:
server {
	listen 80;
	root /home/www/www.testdomain.de/;
	index index.html index.htm index.php;
	autoindex off; 
	server_name www.testdomain.de testdomain.de;
}

Frage:

Wie ist es möglich, wenn jemand z.B. https://test2domain.de/ oder https://www.test2domain.de/ eingibt, dass nicht irgendein SSL von irgendeinem Projekt genommen wird bzw. wie kann ich das direkt ohne Zertifikatsüberprüfung an die richtige Domain weiterleiten?
Es ist ein nogo wenn ein Kunde eine Domain aufruft und auf eine andere Domain herauskommt die von KundeB ist.
Die Konfiguration oben an sich, läuft ganz gut.
Wir rätseln jetzt schon seit einiger Zeit. Es muss doch ein Möglichkeit geben das du realisieren.

Ich Bedanke mich jedenfalls schon mal für euer Interesse mit an diesem Problem zu arbeiten. :)
Und ich hoffe Ihr habt das irgendwie verstanden so wie ich das erklärt habe XD
 
Ein Loadbalancer ist ein Loadbalancer, da ist es doch kein Wunder dass man bei jedem Aufruf woanders raus kommt.
Wenn ich das richtig verstehe, suchst du einen Reverse Proxy und keinen Loadbalancer.

Mich wundert, warum ihr keine Subdomains nutzt. das wäre doch viel übersichtlicher?

Den Reverse Proxy lässt du dann mit verschiedenen Listenern die jeweiligen Alias bzw Subdomains abhören und leitest die Anfrage dann an den entsprechenden Webserver im eigenen Netzwerk.


Was das Zertifikat angeht: Wie gesagt: Subdomains. Und Wildcard Zertifikat nutzen. Andernfalls müsstest du jedesmal ein neues SAN Zertifikat ausstellen wenn ein neuer Kunde dazu kommt oder für jeden Kunden ein Zertifikat kaufen.
 
Zuletzt bearbeitet:
Kannst du nicht das gleiche Zertifikat für mehrere Seiten bestellen? Dann musst du auch nicht mehrere verschiedene verwalten.

oder für jeden Kunden ein Zertifikat kaufen

Oder halt einfach Let's Encrypt benutzen.
 
Kannst du nicht das gleiche Zertifikat für mehrere Seiten bestellen? Dann musst du auch nicht mehrere verschiedene verwalten.

Geht, aber nur solange kein neuer Kunde dazu kommt. Heißt dann SAN Zertifikat und muss jedes mal neu bestellt werden wenn ein Kunde dazu kommt, dann kann man auch gleich ein eigenes kaufen pro Kunde ;-)
 
Also ich kann mich nur auf Let's Encrypt berufen, bezahlen würde ich für SSL-Zertifikate nicht (zumidnest nicht, solange ich keine nativen Wildcard-Zertifikate brauche). Und da ist es so, dass ich alles auf der Kommandozeile erledigen kann, somit auch mit Scipten (bspw. um das Zertifikat bei einem neuen Nutzer entsprechend zu erweitern). Damit kann der Mehraufwand mit einem Zertifikat reduziert bzw. vollständig eliminiert werden. Natürlich würde das Zertifikat dann entsprechend oft geupdatet werden.
 
Nginx als Loadbalancer raus und dafür HAProxy rein (Config liest sich auch wesentlich besser, da könnte man auch z.b. eine Datei als Quelle für Entscheidungen nutzen), da kann man auch einen Ordner als Zertifikatsquelle wählen, wo man einfach alle in passender Form ablegt.

Nur du kannst damit nicht den Fall abfangen, dass jemand per https auf eine zertifikatslose Domain zugreift, außer ihr packt alle DNS-Einträge für http-only Domains auf eine IP (und leitet dann im Zweifel nochmals weiter) und alles mit https auf eine andere, macht aber auch kein Spaß, da man dann den DNS uU wie verrückt pflegen muss.

HTTPS ist halt: Erst Zertfikat, dann der Rest.

Von Let's Encrypt & co halte ich nix, es wird nicht umsonst bei div. kostenlosen Zertifizierungsstellen der Trust in den Browsern entfernt.
 
Von Let's Encrypt & co halte ich nix, es wird nicht umsonst bei div. kostenlosen Zertifizierungsstellen der Trust in den Browsern entfernt.

Elaboriere das doch bitte ein bisschen. Warum hältst du davon nichts? habe bisher noch keinen Browser gehabt, der das Zertifikat nicht gefressen hätte.
 
Danke schon mal für die vielen Antworten.

@Zensai
Loadbalancer ist eigentlich eine falscher ausdruck in dem sinne. Wie du an der Config siehst leitet er ja nur auf den richtigen Server weiter.

Subdomains ist keine Alternative. Es gibt nun mal kunden die für eine Webseite gleich mal 5 bis ende offen Domains haben wollen die aber alle nur auf eine Haubtdomain weiterleiten. Leider kann ich auch kein SAN Zertifikat ausstellen lassen, das wird exorbitant teuer, das macht kein Kunde mit. Wenn es nicht so schlimm wäre, würde jeder Kunde sein eigenes SAN Zertifikat bekommen und gut.

Ich verstehe nicht so ganz wie du darauf kommst das ich für jeden neuen Kunden ein neues SAN Zertifikat benötigen würde. Ich brauch ja nur, wenn eine neue Domain dazu kommt für den Kunden, ein neues bestellen. Das mösste man halt dementsprechend abklären.

Die Konfiguration an sich macht ja keine Anstalten.


@sdwaroc
LetsEncrypt ist ja schön und gut, benutze ich Privat auch, aber gewerblich ist das in meinen Augen ein no-go.
mit LetsEncrypt könnte ich ja auch SAN Zertifikate machen, aber das bringt mir in dem Fall leider nichts.


@VDC
Ich denke mal auch das genau diese HTTPS vor Rest Geschichte mir das Genick brechen wird.
Es muss doch irgendwie eine Möglichkeit geben.
 
Die Möglichkeit steht da, braucht aber halt 2 ext. Adressen. Alle Aliase auf die eine IP und dann uU Umleitung auf die andere.

PS: HAProxy ist trotzdem sexy und macht es euch wesentlich einfacher, ganz einfach, weil er dafür gebaut ist.
 

Sorry, aber da geht's nicht um Let's Encrypt. ;)

aber gewerblich ist das in meinen Augen ein no-go

Weil? Da passiert genau das Gleiche wie bei allen anderen auch Anbietern auch, nur eben kostenlos. Es ist nicht sicherer/unsicherer. Solange die Zertifikate die gewünschten Features haben sind sie gleichwertig zu gekauften. Wenn man allerdings Wildcards oder etwas braucht, was über die reine Domainvalidierung hinausgeht, muss man entsprechend zahlen, logisch. Bis zu dem Punkt ist es wenig sinnvoll, aus technischer wie aus betriebswirtschaftlicher Sicht, Geld dafür auszugeben.
 
Alleine schon das du vom Kunden nicht verlangen kannst dafür zu zahlen und du als Hoster auch noch Mehrarbeit hast ohne einen Cent dafür zu sehen.
 
Klar kannst du Geld dafür nehmen: Das Geld für deine Arbeit das Zertifikat über Let's Encrypt bereitzustellen. Sonst müsstest du ja auch bei gekauften lediglich den Einkaufspreis weitergeben dürfen und hättest somit nichts für die eigene Tasche. ;)
 
So jetzt hab ich alles so eingestellt das es über 2 IP's läuft. eine für HTTP und eine für HTTPS
Neues Phänomen: wenn ich die Externe IP für HTTP in die Adressleiste eingebe leitet er mich auf eins der Projekte. Das sollte auch nicht sein.
Eigentlich laut der default Config sollte er mich bei allem was nicht definiert ist auf unsere Standard leer Seite leiten.

Edit:
Ich raffs jetzt bald nicht mehr -.-
Ich habe jetzt mal alles was mit SSL zu tun hat in die Default Conf.
Jetzt zeigt er mir auch die Leerseite an wenn ich die IP eingebe.
Allerdings wenn ich die Webseite von KundeA über HTTP aufrufe, komme ich auf der Leerseite des LB's raus. Eigentlich sollte ich jetzt auf der Leerseite des Webservers raus kommen umgeleitet auf HTTPS.

Edit2:
Hat sich soeben auch wieder erledigt. Keine Ahnung warum. Der Fehler ist jetzt einfach verschwunden. Am Cache liegt es übrigens nicht.
 
Zuletzt bearbeitet:
Zurück
Oben