421 Fehlgeleitete Anfrage

10

Ich erhalte gelegentlich den folgenden 421-Fehler:

Fehlgeleitete Anfrage

Der Client benötigt für diese Anforderung eine neue Verbindung, da der angeforderte Hostname nicht mit der für diese Verbindung verwendeten SNI (Server Name Indication) übereinstimmt.

Durch das Aktualisieren des Browsers wird der Fehler jedoch behoben und die Seite wird normal geladen. Beim nächsten Laden der Seite kommt es nicht zu Fehlern und das Muster scheint daher ziemlich zufällig zu sein. Das einzige Muster, das ich sehen kann, ist, dass dies passieren kann, wenn ich eine Seite mithilfe des Headers umlenke ("Location:". $ Url);

Ich habe ein PositiveSSL Multi-Domain-Zertifikat von Comodo. Meine Server sind Apache auf einem gemeinsam genutzten Webhosting-Dienst, sodass ich keinen Zugriff auf die Konfiguration habe.

Ich lade Seiten von einer Domain und innerhalb der Seite befinden sich Links zu einer zweiten Domain im Zertifikat.

Alles, was ich in Bezug auf diesen Fehler gelesen habe, scheint darauf hinzudeuten, dass dieses Problem mit einem Multi-Domain-Zertifikat zusammenhängt.

Was ich wissen möchte, ist, ob es irgendetwas auf der Codierungsseite der Webseite (PHP) gibt, das dies verursachen kann (und behoben werden kann) oder ob es sich um einen Konfigurationsfehler oder möglicherweise einen Serverfehler handelt und nur mein Hosting-Service dies kann repariere es.

Mein Hosting-Service war bisher nicht in der Lage, etwas bereitzustellen, und bat um einen Rückruf mit der genauen Uhrzeit, zu der er das nächste Mal recherchieren kann. Jede Hilfe wäre dankbar, da ich nicht besonders zuversichtlich bin, dass sie dies herausfinden können.

UPDATE Ok, fast ein paar Jahre später und entschied, dass es Zeit war, sich damit zu befassen. Ich konnte die meisten Probleme lösen, indem ich meine statischen Domänen entfernte, die Bilder und Javascript bereitstellten. Für einige dieser Inhalte verwendete ich jedoch immer noch eine zweite Domain, und insbesondere Safari bereitete mir immer noch Probleme.

Ich habe mehr recherchiert und bin auf einen anderen Artikel gestoßen, der hier darüber spricht . Genau das, was @Kevin beschreibt. Der Artikel bestätigte, dass es in Safari passiert. Aus diesem Grund habe ich mich daran gemacht, separate Zertifikate für jede Domain zu erhalten. Ich bin auf einem gemeinsam genutzten Host (Webhostinghub) und habe festgestellt, dass sie jetzt kostenloses SSL (AutoSSL) anbieten, das automatisch erneuert wird. Es klang zu gut, um wahr zu sein. Sie haben mich mit 5 kostenlosen Zertifikaten ausgestattet. So weit, ist es gut. Ich kann sogar versuchen, die statischen Domänen zum Testen wieder zu aktivieren. Wenn dies alles funktioniert, spare ich $, um als Bonus zu booten, und lasse meine Comodo-Zertifikate im Juli ablaufen.

mseifert
quelle
Hosten Sie mehrere Websites auf demselben Apache-Server UND verwenden Sie dasselbe SSL-Zertifikat UND der Fehler tritt auf, wenn Sie zwischen diesen Domänennamen wechseln?
John Hanley
Wenn die Antwort JA lautet, überprüfen Sie, ob die IP-Adresse für jede Domäne demselben virtuellen Server zugeordnet ist. Wenn JA, haben Sie zwei Möglichkeiten (die mir einfallen): 1) Stellen Sie für jeden Domainnamen separate SSL-Zertifikate aus. 2) Verschieben Sie die Webserver für jede Domäne auf unterschiedliche Server (unterschiedliche IP-Adressen). Angesichts der Tatsache, dass Sie Shared Hosting verwenden, ist Option 1 wahrscheinlich die beste Lösung. Sie können diese Lösung mit Let's Encrypt testen, um mehrere kostenlose Zertifikate für die Installation auf den anderen Webservern auszustellen.
John Hanley
Fragen Sie Ihren Hosting-Anbieter, ob er mod_http2 deaktivieren kann.
John Hanley
@ JohnHanley - re # 1, ja, es ist das gleiche SSL mit 6 Domains. Es ist nicht einfach, genau zu sagen, wann der Fehler auftritt. Das Hauptszenario ist, dass ich mich in einer Domain befinde und Inhalte (Bilder und JS) aus zwei anderen Domains ziehe. Zu Nr. 2: Die IP-Adresse ist definitiv dieselbe - ich stelle fest, dass die Ausstellung separater Zertifikate für jeden Domainnamen ziemlich teurer wäre. Ich habe mich mit Let's Encrypt befasst, aber es wird von meinem Provider nicht unterstützt. Mein Provider hat in den letzten 6 Monaten kostenlose Zertifikate angeboten. Wenn also in diesem Monat eine Verlängerung ansteht, werde ich wechseln und sehen, was passiert. Zu # 3 - sie können mod_http2 nicht deaktivieren. Danke
mseifert
Tatsächlich unterstützen alle Anbieter Let's Encrypt, sofern sie dies nicht ausdrücklich blockieren. SSL-Zertifikate sind gleich, egal wo Sie sie erhalten. Der einzige Unterschied besteht in der Art der Validierung (DV, OV, EV) und der Dateipackung / dem Dateiformat. Apache ist so beliebt, dass jeder sie unterstützt. Solange Ihr Anbieter das Hochladen Ihres eigenen Zertifikats (Zertifikat und privater Schlüssel) unterstützt, können Sie die DNS-Validierung verwenden, um diese zu umgehen. Wenn sie das Hochladen Ihres eigenen Zertifikats nicht unterstützen, würde ich den Anbieter wechseln.
John Hanley

Antworten:

13

Dies wird durch die folgende Abfolge von Ereignissen verursacht:

  1. Der Server und der Client unterstützen und verwenden HTTP / 2.
  2. Der Client fordert eine Seite an foo.example.com.
  3. Während der TLS - Verhandlung stellt der Server ein Zertifikat , das für beide gültig ist foo.example.comund bar.example.com(und der Kunde nimmt es). Dies kann mit einem Platzhalterzertifikat oder einem SAN-Zertifikat erfolgen.
  4. Der Client verwendet die Verbindung erneut, um eine Anfrage zu stellen bar.example.com.
  5. Der Server kann oder kann die domänenübergreifende Wiederverwendung nicht unterstützen (z. B. weil Sie SSL anders konfiguriert haben und Apache eine TLS-Neuverhandlung erzwingen möchte) und bedient HTTP 421.
  6. Der Client versucht es nicht automatisch mit einer neuen Verbindung (siehe zum Beispiel den Chrome-Fehler Nr. 546991 , der jetzt behoben ist). Der relevante RfC sagt, dass der Client es erneut versuchen kann, nicht, dass er SOLLTE oder MUSS. Ein erneuter Versuch ist nicht besonders benutzerfreundlich, kann jedoch für ein Debugging-Tool oder eine HTTP-Bibliothek wünschenswert sein.

Ereignis Nr. 6 liegt außerhalb Ihrer Kontrolle, aber abhängig von der Software des Servers kann Nr. 5 behoben werden. Weitere Informationen dazu, wie und wann HTTP 421 gesendet wird, finden Sie in der HTTP / 2-Dokumentation Ihres Servers. Alternativ können Sie für jede Domäne separate Zertifikate ausstellen. Dies führt jedoch zu einem höheren Verwaltungsaufwand und ist möglicherweise nicht sinnvoll. Sie können HTTP / 2 auch vollständig deaktivieren, aber das ist in den meisten Fällen wahrscheinlich übertrieben.

Kevin
quelle
Ich habe ein Comodo PositiveSSL Multi-Domain-Zertifikat - das ist in der Tat ein einzelnes SSL-Zertifikat. Das Wechseln zu separaten Zertifikaten ist zu diesem Zeitpunkt ein erheblicher Aufwand und / oder Aufwand. Die Hauptprobleme bestanden darin, statische Cookieless-Domains für meine Bilder bereitzustellen. Es war nicht die Anzahl von 421 wert, die ich bekam. Vorerst habe ich die statischen Domänen deaktiviert. Ich habe immer noch eine gewisse Aufteilung der Ressourcen zwischen Domänen, aber die Anzahl der 421s ist drastisch gesunken. Derzeit nicht die vermeintliche Effizienz wert. Eines Tages werde ich Ihre Empfehlung testen, wenn ich mehr Zeit habe.
mseifert
Vielen Dank für die ausführliche Erklärung. Während dies ein ziemlich ärgerliches Problem ist (und Sie bemerken es nur, wenn Sie Safari größtenteils verwenden), finde ich die Kette von Ereignissen, die zu diesem Problem führen, ziemlich interessant :)
fritzmg
1

Vielleicht ist das für jemanden hilfreich.

Ich habe diesen Fehler erhalten, als ich versucht habe, meine virtuelle Apache-Host-Konfiguration in HTTPS zu ändern, aber nur den Port von 80 auf 443 geändert und vergessen habe, ihn hinzuzufügen

   SSLEngine on
   SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
   SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"

Konfiguration verursacht Fehler 421:

<VirtualHost mydoamin.local:443>   <-- fistly I 
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
</VirtualHost>

Die richtige Konfiguration:

<VirtualHost mydoamin.local:443>
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
       SSLEngine on
       SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
       SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"
</VirtualHost>
Radek Daniluk
quelle
-1

Ich hatte das gleiche Problem. Der Wechsel zu zwei Single-Slot-SSLs hat es geschafft.

Olivier
quelle