421 Richiesta errata


11

Occasionalmente ricevo il seguente errore 421:

Richiesta errata

Il client necessita di una nuova connessione per questa richiesta poiché il nome host richiesto non corrisponde all'indicazione del nome server (SNI) in uso per questa connessione.

Tuttavia, l'aggiornamento del browser cancella l'errore e la pagina si carica normalmente. La prossima volta che si carica la pagina non produrrà ed errori e come tale il modello sembra piuttosto casuale. L'unico modello che posso vedere è che ciò può accadere quando sto reindirizzando una pagina usando l'intestazione ("Posizione:". $ Url);

Ho un certificato multi-dominio PositiveSSL di Comodo. I miei server sono Apache su un servizio di web hosting condiviso, quindi non ho accesso alla configurazione.

Carico pagine da un dominio e all'interno della pagina sono presenti collegamenti a un secondo dominio sul certificato.

Tutto ciò che ho letto su questo errore sembra indicare che questo problema è correlato al fatto che si tratta di un certificato multi-dominio.

Quello che vorrei sapere è se c'è qualcosa sul lato della codifica della pagina Web (php) di cose che possono causare questo (e può essere risolto) o se si tratta di un errore di configurazione o forse di un errore del server e solo il mio servizio di hosting può aggiustalo.

Finora il mio servizio di hosting non è stato in grado di fornire nulla e ha richiesto di richiamare con il tempo esatto successivo in modo che possano effettuare ricerche. Qualsiasi aiuto sarebbe apprezzato in quanto non sono eccessivamente sicuro che possano capirlo.

AGGIORNAMENTO Ok, quasi un paio d'anni dopo e ho deciso che era tempo di occuparsene. Sono stato in grado di risolvere la maggior parte dei problemi rimuovendo i miei domini statici che servivano immagini e javascript. Tuttavia, stavo ancora usando un secondo dominio per alcuni di questi contenuti e in particolare Safari mi stava ancora dando problemi.

Ho fatto più ricerche e ho trovato un altro articolo che ne parla qui . Esattamente quello che descrive @Kevin. L'articolo ha confermato che succede in Safari. Quindi, seguendo i consigli, ho deciso di ottenere certificati separati per ciascun dominio. Sono su un host condiviso (Webhostinghub) e ho scoperto che ora offrono SSL gratuito (AutoSSL) che si rinnova automaticamente. Sembrava bello essere vero. Mi hanno impostato con 5 certificati gratuiti. Fin qui tutto bene. Potrei anche provare a riattivare i domini statici per testare. Se tutto funziona, risparmierò $ per l'avvio come bonus e lascerò scadere i miei certificati Comodo a luglio.


Stai ospitando più siti Web sullo stesso server Apache E stai utilizzando lo stesso certificato SSL E l'errore si verifica quando si passa tra questi nomi di dominio?
John Hanley,

Se la risposta è SÌ, verificare se l'indirizzo IP per ciascun dominio è mappato allo stesso server virtuale. Se SÌ, hai due possibilità (che mi viene in mente): 1) Emettere certificati SSL separati per ciascun nome di dominio. 2) Spostare i server Web per ciascun dominio su server diversi (indirizzi IP diversi). Dato che sei su hosting condiviso, l'opzione 1 è probabilmente la soluzione migliore. È possibile testare questa soluzione utilizzando Let's Encrypt per emettere diversi certificati gratuiti da installare sugli altri server Web.
John Hanley,

Chiedi al tuo provider di hosting se possono disabilitare mod_http2.
John Hanley,

@JohnHanley - re # 1, sì, è lo stesso SSL con 6 domini. Non è facile dire esattamente quando si verifica l'errore. Lo scenario principale è che sono su un dominio e sto estraendo contenuti (immagini e js) da altri due domini. Ri # 2: l'indirizzo IP è sicuramente lo stesso - mi sembra di emettere certificati separati ogni nome di dominio sarebbe molto più costoso. Ho esaminato Let's Encrypt ma non è supportato dal mio provider. Il mio fornitore negli ultimi 6 mesi ha offerto certificati gratuiti, quindi quando arriverà il rinnovo questo mese, cambierò e vedrò cosa succede. Ri # 3 - non possono disabilitare mod_http2. Grazie
mseifert il

In realtà, tutti i provider supportano Let's Encrypt a meno che non lo blocchino specificamente. I certificati SSL sono gli stessi indipendentemente da dove li ottieni. L'unica differenza è il tipo di convalida (DV, OV, EV) e il formato / il formato del file. Apache è così popolare che tutti li supportano. Finché il tuo fornitore ti supporta nel caricamento del tuo certificato (certificato e chiave privata), puoi utilizzare la convalida DNS per aggirarli. Se non supportano il caricamento del tuo certificato, cambierei fornitore.
John Hanley,

Risposte:


14

Ciò è causato dalla seguente sequenza di eventi:

  1. Il server e il client supportano e utilizzano HTTP / 2.
  2. Il client richiede una pagina all'indirizzo foo.example.com.
  3. Durante la negoziazione TLS, il server presenta un certificato valido per entrambi foo.example.come bar.example.com(e il client lo accetta). Questo potrebbe essere fatto con un certificato jolly o un certificato SAN.
  4. Il client riutilizza la connessione per effettuare una richiesta bar.example.com.
  5. Il server non è in grado o non è disposto a supportare il riutilizzo della connessione tra domini (ad esempio perché hai configurato il loro SSL in modo diverso e Apache vuole forzare una rinegoziazione TLS) e serve HTTP 421.
  6. Il client non riprova automaticamente con una nuova connessione (vedere ad esempio il bug Chrome # 546991 , ora risolto). L' RfC pertinente afferma che il client PUO 'riprovare, non che DOVREBBE o DEVE. Il mancato tentativo non è particolarmente intuitivo, ma potrebbe essere desiderabile per uno strumento di debug o una libreria HTTP.

L'evento n. 6 è fuori dal tuo controllo, ma a seconda del software del server, il n. 5 potrebbe essere risolvibile. Consultare la documentazione HTTP / 2 del server per ulteriori informazioni su come e quando invia HTTP 421. In alternativa, è possibile emettere certificati separati per ciascun dominio, ma ciò crea un sovraccarico amministrativo e potrebbe non valerne la pena. Potresti anche disattivare completamente HTTP / 2, ma probabilmente è eccessivo nella maggior parte dei casi.


Ho un certificato multi-dominio Comodo PositiveSSL, che è in effetti un singolo certificato SSL. Andare a certificati separati è uno sforzo e / o una spesa significativi a questo punto. I problemi principali stavano arrivando con il tentativo di avere domini statici senza cookie per servire le mie immagini. Non valeva la pena il numero di 421 che stavo ottenendo. Per ora, ho disabilitato i domini statici. Ho ancora un po 'di condivisione delle risorse tra domini, ma il numero di 421 è diminuito drasticamente. Al momento non vale la presunta efficienza. Un giorno testerò la tua raccomandazione quando avrò più tempo.
mseifert,

Grazie per la spiegazione dettagliata. Mentre questo è un problema piuttosto fastidioso (e lo noti solo quando usi Safari, in gran parte), trovo la catena di eventi che porta a questo problema abbastanza interessante :)
fritzmg

1

Forse questo sarà utile a qualcuno.

Ho ricevuto questo errore quando ho provato a cambiare la configurazione dell'host virtuale apache in HTTPS ma ho cambiato solo la porta da 80 a 443 e ho dimenticato di aggiungere

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

Configurazione che causa l'errore 421:

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

La corretta configurazione:

<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>

-1

Ho avuto lo stesso problema. Il passaggio a due SSL a slot singolo ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.