HTTPS no funciona con Safari

15

Tengo una instancia EC2 con Apache como servidor web (y Wildfly como servidor de aplicaciones, aunque no estoy seguro de que tenga algo que ver con este problema). Frente a EC2 tengo un equilibrador de carga que termina HTTPS y aplica el certificado SSL.

Tanto HTTP como HTTPS funcionan bien en Chrome, pero desafortunadamente no en Safari. Acceder a http://test.papereed.com funciona bien, pero acceder a https://test.papereed.com da el error

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

He buscado en / etc / httpd / logs / error_log y / etc / httpd / logs / access_log y también en la consola de Safari sin encontrar ninguna pista para resolver el problema. Y eso es aproximadamente hasta dónde llega mi conocimiento :-( Cualquier sugerencia sobre cómo rastrear este problema sería muy apreciada.

jola
fuente

Respuestas:

21

curl (si se compila con soporte HTTP / 2) exhibe el mismo problema pero muestra la razón:

error de http2: se recibió un campo de encabezado HTTP no válido: tipo de trama: 1, secuencia: 1, nombre: [actualización], valor: [h2, h2c]

Parece que su servidor está ofreciendo una actualización a HTTP / 2 a pesar de que la conexión ya está hecha con HTTP / 2, lo cual no tiene sentido. No solo eso, está explícitamente prohibido. De RFC 7540 sección 8.1.2.2 :

Un punto final NO DEBE generar un mensaje HTTP / 2 que contenga campos de encabezado específicos de conexión; cualquier mensaje que contenga campos de encabezado específicos de conexión DEBE tratarse como mal formado (Sección 8.1.2.6) ... campos de encabezado específicos de conexión, como Keep-Alive, Proxy-Connection, Transfer-Encoding y Upgrade

Me busca un error ya que Apache no debería enviar este encabezado con HTTP / 2.

Supongo que tienes una configuración como esta

Protocols h2 h2c http/1.1

Dado que los navegadores no son compatibles con HTTP / 2 sin TLS de todos modos y que no se necesita un encabezado de actualización con HTTP / 2 sobre TLS, le recomiendo que reemplace esta configuración con

Protocols h2 http/1.1

Esto deshabilita el soporte para HTTP / 2 innecesario sin TLS, pero con suerte debería deshacerse del encabezado de actualización de esta manera, ya que esto solo es necesario para actualizar de HTTP simple a HTTP / 2 simple.

EDITAR: según el comentario del OP, cambiar la Protocolsconfiguración no ayudó. Era necesario evitar explícitamente este comportamiento (es decir, un error) mod_http2eliminando el Upgradeencabezado:

Header unset Upgrade
Steffen Ullrich
fuente
2
¡Gracias! De hecho, tenía la siguiente configuración: # 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> seguir su recomendación y cambiar a Protocols h2 http/1.1no eliminó el encabezado de actualización, por lo que mantuve la línea de Protocolos tal como está y agregué lo siguiente: Header unset Upgradepara eliminar el encabezado. No puedo decir que estoy 100% al tanto de qué / por qué sucede aquí, pero ahora también funciona bien en Safari :-)
jola
@jola: gracias por los comentarios. Lo he incluido en la respuesta.
Steffen Ullrich
3

Creo que este es un problema de Safari en lugar de un problema de AWS / SSL. La búsqueda de ese error obtiene muchos, muchos resultados en Google.

Todo se verifica con el sitio web de acuerdo con la prueba SSL Shopper y la prueba SSL Labs .

Encontré esta posible solución al problema.

La solución fue ir a las Preferencias de Safari, en Privacidad y enumerar todos los Detalles. Esto proporcionó un registro de todos los sitios donde se habían utilizado cookies, etc. Encontré la página de dominio de Weather Network y borré todo el contenido. Luego pude volver a cargar la página de Weather Network sin problemas. Supongo que esto funcionaría para otros sitios singulares similares.

También hay esto que podría hacerse con Apache.

Tim
fuente
Sí, busqué en Google pero no encontré nada que se aplique directamente (afaiu). He leído la solución propuesta para nginx pero no estoy seguro de cómo / si esto es aplicable para apache.
jola
Apache, sin duda, podrá eliminar el encabezado "Actualizar" , que es todo lo que Nginx está haciendo.
Tim