HTTPS 不适用于 Safari

HTTPS 不适用于 Safari

我有一个 EC2 实例,其中 Apache 是 Web 服务器(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 控制台,但没有找到任何解决问题的提示。这就是我所知道的 :-( 如果能提供任何有关如何追踪此问题的提示,我将不胜感激。

答案1

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 节)... 连接特定的标头字段,例如 Keep-Alive、Proxy-Connection、Transfer-Encoding 和升级

在我看来这是一个错误,因为 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

答案2

我认为这是 Safari 的问题,而不是 AWS / SSL 的问题。在 Google 上搜索该错误会得到很多结果。

一切都按照网站检查SSL 购物者测试SSL 实验室测试

我发现这个可能的解决方案解决问题。

解决方案是进入 Safari 偏好设置,在隐私下列出所有详细信息。这提供了所有使用 cookie 等的网站的日志。我找到了 Weather Network 域页面并清除了其中的所有内容。然后我能够毫无问题地重新加载 Weather Network 页面。我认为这对其他类似的单一网站也有效。

还有这可以通过 Apache 来完成。

答案3

Nginx: Header unset Upgrade; 如果您的请求由代理执行,则无法工作,请改用 proxy_hide_header Upgrade;

答案4

我在 Apache 指令中设置了以下内容后:

Header unset Upgrade

NGinx 指令如下:

proxy_hide_header Upgrade;

Safari 的问题已消失。

相关内容