it-swarm.com.de

HTTPS-Umleitung von der Stammdomäne (d. H. Apex oder "nackt") zur "www" -Unterdomäne, ohne dass der Browser auswirft?

Für DNS-A-Einträge muss eine IP-Adresse in der DNS-Konfiguration Ihrer Anwendung fest codiert sein

... die Heroku empfiehlt, zu vermeiden. Heroku schlägt zwei Problemumgehungen vor:

... mit einem DNS-Provider, der CNAME-ähnliche Funktionen am Scheitelpunkt unterstützt, und die Subdomain-Umleitung`.

Meine Frage dreht sich um die letztere Option (weil die erstere nicht von DreamHost AFAIK unterstützt wird):

Ist es möglich, für HTTPS-Anfragen von der Stammdomäne (d. H. Apex oder "naked") zur "www" -Unterdomäne umzuleiten, ohne dass der Browser auswirft?

Heroku denkt nicht:

Anwendungen, die eine SSL-Verschlüsselung erfordern, sollten die ALIAS/ANAME-Konfiguration in der Stammdomäne verwenden. Die Umleitung der Subdomain verursacht einen Browserfehler, wenn die Stammdomäne über SSL angefordert wird (d. H. https://example.com ).

... aber ich hoffe, das ist eine unvollständige (oder falsche) Aussage.

KLARIFIZIERUNGS-UPDATE:

Das eigentliche Problem bei der Umleitung von Apex zu 'www' besteht darin, dass die Eingabe von https://example.com direkt in einen Browser eine Zertifikatswarnung auslöst. Sicher, es ist ein Randfall, aber kein kleiner Fall.

LÖSUNGS-UPDATE:

Ich habe dieses Problem mit DNSimple gelöst. (Musste nicht einmal meine Domain übertragen!) 

Ich glaube, dass easyDNS eine ähnliche Funktion bietet, aber überrascht ist, dass die meisten anderen Domain-Hosting-Unternehmen dies nicht tun.

42
thewillcole

Hier sind zwei getrennte, aber voneinander abhängige Ebenen der Indirektion zu berücksichtigen. Die erste ist, zu welcher IP-Adresse sich ein DNS-Name letztendlich auflöst. Das zweite ist, was der Server auf dieser IP-Adresse tut.

Denken Sie daran, dass, wenn Sie eine URL in einen Browser eingeben, das erste, was passiert, eine DNS-Suche ist. Normalerweise wird dies vom Betriebssystem übernommen - nicht vom Browser selbst.

Ihr Browser fragt also das Betriebssystem: "Wie lautet die Adresse von example.com?" Das Betriebssystem sucht den Datensatz nach. Wenn er eine CNAME abruft, sucht er nach diesem Datensatz, bis er einen A-Datensatz findet. Das Betriebssystem antwortet dem Browser dann mit einer Antwort.

Ihr Browser stellt dann eine TCP Verbindung zu dieser IP-Adresse her:

  • Wenn eine http: // URL mit dem Port 80 verbunden ist, wird eine HTTP-Anforderung ausgegeben.
  • Wenn ein https: // URL, stellt eine Verbindung zu Port 443 her, stellt eine TLS/SSL-Verbindung her (was die Validierung von Zertifikaten bedeutet), dann gibt eine HTTP-Anforderung über den sicheren Kanal aus.

Nur an diesem Punkt kann eine HTTP-Umleitung stattfinden. Der Browser sendet eine Anfrage (GET /) und der Server kann mit einer 301 auf eine beliebige andere URL antworten.

Verstehen Sie, dass die von Registraren angebotenen "Subdomain Redirection" -Dienste nichts anderes sind als ein regulärer HTTP-Server, der 301s ausgibt. Wenn Sie sich für die Umleitungsoption eines Registrars entscheiden, wird der A-Datensatz des Apex Ihrer Domain auf einen Server gesetzt, den sie steuern, und dieser Server weist den Browser an, auf www.example.com zuzugreifen.

Da die meisten Registrare das Hochladen eines SSL-Zertifikats auf ihren Umleitungsserver nicht zulassen, können Browser die erforderliche sichere Verbindung zum Server nicht herstellen und stellen daher niemals eine HTTP-Anforderung aus. Daher schlagen Anforderungen für https: //example.com fehl.

Warum kann man also nicht einfach den Scheitel CNAME? Es ist verboten.

Das Domänensystem stellt eine solche Funktion unter Verwendung des kanonischen Namens .__ zur Verfügung. (CNAME) RR [Ressource aufzeichnen]. Ein CNAME RR identifiziert seinen Besitzernamen als Alias ​​und gibt den entsprechenden kanonischen Namen im Abschnitt RDATA des .__ an. RR. Wenn eine CNAME RR an einem Knoten vorhanden ist, sollten keine anderen Daten vorhanden sein Present; Dadurch wird sichergestellt, dass die Daten für einen kanonischen Namen und seine Aliasnamen kann nicht anders sein Diese Regel stellt auch sicher, dass eine zwischengespeicherte CNAME .__ sein kann. Wird ohne Prüfung mit einem autorisierenden Server für andere RR-Typen verwendet.

Die Spezifikation erfordert, dass ein Datensatz CNAME der einzige Datensatz für eine bestimmte (Sub-) Domäne ist. Dies steht im Widerspruch zur Anforderung eines SOA-Datensatzes am Scheitelpunkt. (Es gibt einige Anstrengungen, die Spezifikationen so zu ändern, dass CNAME und SOA koexistieren können, aber es gibt immer noch viele fehlerhafte SMTP-Implementierungen, die von der CNAME in einer Domäne verwirrt werden.)

Sie haben die folgenden Möglichkeiten, um SSL am Apex zum Laufen zu bringen:

  • Verwenden Sie einen Drittanbieter-Dienst, der SSL auf dem Redirect-Server unterstützt. Sie werden wahrscheinlich dafür bezahlen. Hier ist ein Dienst. I würde nicht diesen Weg empfehlen, da er Ihnen die Kontrolle über die Zuverlässigkeit überlässt und Sie die Schlüssel für Ihr SSL-Zertifikat an jemanden übergeben müssen, der möglicherweise vertrauenswürdig ist.
  • Führen Sie Ihren eigenen Umleitungsserver aus. Da für den Apex ein A-Datensatz erforderlich ist, benötigen Sie eine statische IP-Adresse, die Dienste wie Heroku und AWS 'ELB nicht bereitstellen. Wenn Sie sich also in einer Cloud-Umgebung befinden, ist es sehr schwierig (wenn nicht unmöglich), Zuverlässigkeit zu garantieren. Auf der positiven Seite behalten Sie die Kontrolle über Ihre SSL-Schlüssel.
  • Verwenden Sie einen DNS-Host, mit dem Sie einen Alias ​​ setzen können. Verweisen Sie den Alias ​​auf Ihre Heroku-Domäne/ELB/was auch immer. Dies ist höchstwahrscheinlich die beste Option.

Ein Alias ​​ ist technisch gesehen kein DNS-Datensatz. Stattdessen handelt es sich um eine spezielle Konfiguration auf der DNS-Host-Seite, die einen A-Datensatz aus dem Ergebnis einer anderen Suche zurückgibt. Mit anderen Worten:

  1. Ihr Betriebssystem sendet eine DNS-Anforderung für example.com an Ihren DNS-Host.
  2. Ihr DNS-Host liest die interne Alias-Konfiguration und sendet eine DNS-Anforderung für diese Domäne. Wenn Sie also einen Alias ​​für example.herokuapp.com eingerichtet haben, wird der Datensatz A dieser Domäne nachgeschlagen.
  3. Der DNS-Host gibt einen einfachen A-Datensatz mit den IP-Adressen zurück, die er aus der Alias-Suche erhalten hat.

Mit einem Alias-Eintrag könnten Sie Ihren Scheitelpunkt auf den gleichen Cloud-Lastausgleich setzen, auf den sich Ihre www -Domäne CNAMEd bezieht. Vorausgesetzt, Sie haben SSL in der Domäne www eingerichtet, funktioniert die nackte Domäne problemlos. Zu diesem Zeitpunkt können Sie entscheiden, ob Ihre App eine Weiterleitung ausgibt oder Ihre Inhalte nur direkt über die nackte Domain bereitstellt.

84
josh3736

Sie benötigen ein Zertifikat, das sowohl www.example.com als auch example.com schützt.

1
nmit026

HINWEIS: Ich habe dies nicht mit der Heroku-App versucht. Ich teile diese Lösung immer noch hier, da dies die erste Stackoverflow-Seite ist, die bei der Suche nach einer Umleitung von nackten Domänen in die WWW-Version angezeigt wird. Es kann anderen helfen, die nach einer Antwort auf eine generische Umleitung suchen. 

Ich habe nackte Domains erfolgreich an die www-Version umgeleitet. Außerdem habe ich die HTTP-Version unter Verwendung der google-Domains-DNS-Einstellungen in synthetischen Datensätzen an die HTTPS-Version umgeleitet.

  1. Löschen Sie alle 'A'-Datensätze für' @ 'in Ihrem DNS.
  2. Fügen Sie einen synthetischen Datensatz mit subdomain = '@' hinzu und leiten Sie ihn zur WWW-Version Ihrer Website um.
  3. Bearbeiten Sie nach dem Hinzufügen denselben Datensatz und ändern Sie die Standardeinstellung ' http://www.example.com ' in ' https://www.example.com '. Beachten Sie das 's' in http hier. Klicken Sie auf Speichern.
  4. Das ist es. Ihre Umleitung wird nun von den DNS-Einstellungen übernommen.

Detaillierte Schritte sind hier dokumentiert: https://www.am22tech.com/redirect-naked-domain-www-http-https-google-domains/

0
Anil Gupta