HTTPS는 Safari에서 작동하지 않습니다


16

웹 서버로 Apache를 사용하는 EC2 인스턴스가 있습니다 (이 문제와 관련이 있는지 확실하지 않지만 응용 프로그램 서버로 Wildfly가 있습니다). EC2 앞에 HTTPS를 종료하고 SSL 인증서를 적용하는로드 밸런서가 있습니다.

HTTP와 HTTPS는 모두 Chrome에서 제대로 작동하지만 불행히도 Safari에서는 작동하지 않습니다. 액세스 http://test.papereed.com는 잘 작동하지만, 액세스 https://test.papereed.com는 오류를 제공합니다

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

/ etc / httpd / logs / error_log 및 / etc / httpd / logs / access_log 및 Safari 콘솔에서도 문제 해결에 대한 힌트를 찾지 못했습니다. 그리고 그것은 나의 지식이 얼마나 멀리 가고 있는지에 관한 것입니다 :-(이 문제를 추적하는 방법에 대한 힌트는 대단히 감사하겠습니다.

답변:


22

curl (HTTP / 2 지원으로 컴파일 된 경우)은 동일한 문제가 있지만 그 이유를 보여줍니다.

http2 오류 : 잘못된 HTTP 헤더 필드가 수신되었습니다 : 프레임 유형 : 1, 스트림 : 1, 이름 : [업그레이드], 값 : [h2, h2c]

이미 HTTP / 2로 연결되어 있지만 서버가 HTTP / 2로 업그레이드를 제공하는 것 같습니다. 뿐만 아니라 명시 적으로 금지되어 있습니다. 에서 RFC 7540 섹션 8.1.2.2 :

엔드 포인트는 연결 별 헤더 필드를 포함하는 HTTP / 2 메시지를 생성해서는 안됩니다. 연결 별 헤더 필드를 포함하는 모든 메시지 는 잘못된 형식으로 처리되어야합니다 (8.1.2.6 단원) .... 연결 유지 헤더, 프록시 연결, 전송 인코딩 및 업그레이드 와 같은 연결 특정 헤더 필드

Apache가 HTTP / 2와 함께이 헤더를 보내면 안되기 때문에 버그를 찾습니다.

내 생각 엔 당신은 이와 같은 구성을 가지고 있다는 것입니다.

Protocols h2 h2c http/1.1

브라우저가 TLS가없는 HTTP / 2를 지원하지 않고 TLS를 통한 HTTP / 2에는 업그레이드 헤더가 필요하지 않다면이 구성을 다음과 같이 바꾸는 것이 좋습니다.

Protocols h2 http/1.1

이렇게하면 TLS없이 불필요한 HTTP / 2에 대한 지원이 비활성화되지만 업그레이드 헤더는 일반 HTTP에서 일반 HTTP / 2로 업그레이드하는 경우에만 필요하므로이 방법으로 업그레이드 헤더를 제거해야합니다.

편집 : OP의 의견에 따르면 Protocols구성을 변경해도 도움이되지 않았습니다. 헤더 mod_http2를 삭제 하여이 동작 (예 : 버그)을 명시 적으로 해결해야했습니다 Upgrade.

Header unset Upgrade

3
감사합니다! 실제로 다음과 같은 구성이 있습니다. # 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> 권장 사항을 따르고 Protocols h2 http/1.1업그레이드 헤더를 제거하지 않기로 변경 했기 때문에 대신 프로토콜 줄을 그대로 유지 Header unset Upgrade하고 헤더를 제거하려면 다음을 추가했습니다 . 내가 여기서 무슨 일이 일어나는지 / 왜 100 %라고 말할 수는 없지만 이제 Safari에서도 잘 작동합니다 :-)
jola

@ jola : 피드백 주셔서 감사합니다. 나는 그것을 대답에 포함시켰다.
Steffen Ullrich

3

나는 이것이 AWS / SSL 문제가 아닌 Safari 문제라고 생각합니다. 이 오류에 대한 검색은 Google에서 많은 결과를 얻습니다.

SSL Shopper 테스트SSL Labs 테스트 에 따라 모든 것이 웹 사이트에서 확인됩니다 .

문제에 대한 가능한 해결책 을 찾았습니다 .

해결책은 Safari 환경 설정의 개인 정보에서 모든 세부 정보를 나열하는 것입니다. 쿠키 등이 사용 된 모든 사이트에 대한 로그를 제공했습니다. 날씨 네트워크 도메인 페이지를 찾아서 모든 내용을 지 웠습니다. 그런 다음 아무런 문제없이 날씨 네트워크 페이지를 다시로드 할 수있었습니다. 나는 이것이 다른 유사한 단일 사이트에서 작동한다고 가정합니다.

도 있습니다 아파치와 함께 할 수있다.


예, 나는 이것을 구글 검색했지만 직접 적용되는 것을 찾지 못했습니다 (afaiu). 제안 된 nginx 솔루션을 읽었지만 이것이 아파치에 어떻게 적용되는지 확실하지 않습니다.
jola

아파치는 의심 할 바없이 "업그레이드"헤더 를 삭제할 수 있습니다 .
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.