HTTPS non funziona con Safari


16

Ho un'istanza EC2 con Apache come webserver (e Wildfly come app-server, anche se non sono sicuro che abbia a che fare con questo problema). Di fronte a EC2 ho un bilanciamento del carico che termina HTTPS e applica il certificato SSL.

Sia HTTP che HTTPS funzionano bene in Chrome, ma sfortunatamente non in Safari. L'accesso a http://test.papereed.com funziona correttamente , ma l'accesso a https://test.papereed.com dà l'errore

"Safari can't open the page. The error is "The operation couldn't be completed. Protocol error" (NSPOSIXErrorDomain:100)"

Ho cercato in / etc / httpd / logs / error_log e / etc / httpd / logs / access_log e anche nella console Safari senza trovare alcun suggerimento per risolvere il problema. E questo è quanto lontano va la mia conoscenza :-( Qualsiasi suggerimento su come rintracciare questo problema sarebbe molto apprezzato.

Risposte:


22

curl (se compilato con il supporto HTTP / 2) presenta lo stesso problema ma mostra il motivo:

errore http2: campo di intestazione HTTP non valido ricevuto: tipo di frame: 1, flusso: 1, nome: [upgrade], valore: [h2, h2c]

Sembra che il tuo server offra un aggiornamento a HTTP / 2 anche se la connessione è già stata effettuata con HTTP / 2, il che non ha senso. Non solo, è esplicitamente vietato. Dalla sezione 8.1.2.2 di RFC 7540 :

Un endpoint NON DEVE generare un messaggio HTTP / 2 contenente campi di intestazione specifici della connessione; qualsiasi messaggio contenente campi di intestazione specifici della connessione DEVE essere trattato come non valido (Sezione 8.1.2.6) .... campi di intestazione specifici della connessione, come Keep-Alive, Proxy-Connection, Transfer-Encoding e Upgrade

Mi sembra un bug poiché Apache non dovrebbe inviare questa intestazione con HTTP / 2.

Suppongo che tu abbia una configurazione come questa

Protocols h2 h2c http/1.1

Dato che i browser non supportano comunque HTTP / 2 senza TLS e che non è necessaria alcuna intestazione di aggiornamento con HTTP / 2 su TLS, si consiglia di sostituire questa configurazione con

Protocols h2 http/1.1

Ciò disabilita il supporto per l'HTTP / 2 non necessario senza TLS, ma si spera di sbarazzarsi dell'intestazione Upgrade in questo modo poiché è necessario solo per l'aggiornamento da HTTP semplice a HTTP / 2 semplice.

EDIT: secondo il commento dell'OP cambiare la Protocolsconfigurazione non ha aiutato. È stato necessario aggirare esplicitamente questo comportamento (ad es. Bug) mod_http2eliminando l' Upgradeintestazione:

Header unset Upgrade

3
Grazie! Ho effettivamente avuto la seguente configurazione: # Enable HTTP/2 by default # https://httpd.apache.org/docs/2.4/mod/core.html#protocols <IfModule mod_http2.c> Protocols h2 h2c http/1.1 </IfModule> Seguendo la tua raccomandazione e passando a Protocols h2 http/1.1non ho rimosso l'intestazione di aggiornamento, quindi ho mantenuto la riga Protocolli così com'è e ho aggiunto quanto segue: Header unset Upgradeper rimuovere l'intestazione. Non posso dire di essere al 100% in cima a cosa / perché succede qui, ma ora funziona anche su Safari :-)
jola,

@jola: grazie per il feedback. L'ho incluso nella risposta.
Steffen Ullrich,

3

Penso che questo sia un problema di Safari piuttosto che un problema AWS / SSL. La ricerca di quell'errore ottiene molti, molti risultati su Google.

Tutto si verifica con il sito Web secondo il test SSL Shopper e SSL Labs Test .

Ho trovato questa possibile soluzione al problema.

La soluzione era andare in Preferenze di Safari, in Privacy ed elencare tutti i dettagli. Ciò ha fornito un registro di tutti i siti in cui erano stati utilizzati cookie, ecc. Ho trovato la pagina del dominio della rete meteorologica e ne ho cancellato tutto il contenuto. Sono stato quindi in grado di ricaricare la pagina Rete meteorologica senza problemi. Presumo che questo funzionerebbe per altri siti singolari simili.

C'è anche questo che potrebbe essere fatto con Apache.


Sì, ho cercato su Google questo, ma non ho trovato nulla che si applica direttamente (afaiu). Ho letto la soluzione proposta per nginx ma non sono sicuro di come / se questo è applicabile per apache.
jola,

Apache sarà senza dubbio in grado di eliminare l' intestazione "Upgrade" , che è tutto ciò che Nginx sta facendo.
Tim
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.