Http/2 站点仅在 Safari 9 上无法加载 - 在 Chrome、IE、Edge、Firefox 上加载正常
Posted
技术标签:
【中文标题】Http/2 站点仅在 Safari 9 上无法加载 - 在 Chrome、IE、Edge、Firefox 上加载正常【英文标题】:Http/2 site will not load on Safari 9 Only - Loads okay on Chrome, IE, Edge, Firefox 【发布时间】:2016-09-09 15:46:45 【问题描述】:我有一个最近升级到 HTTP/2 的站点,该站点运行 apache 2.4 / nginx 1.9.5 反向代理设置。除了 Safari 9 之外,我测试过的所有现代浏览器和操作系统都可以正常加载。在 Safari 9 上,网页在几分钟后就会超时,出现自定义 500 错误页面。这个问题是可重复的,因为我在 3 台带有 Safari 9 的不同 Mac 上对其进行了测试,并且在所有 3 个地方都发生了同样的事情。 apache 或 nginx 错误日志中没有出现错误。访问日志显示来自 Safari 浏览器的请求一遍又一遍地重复,所有 HTTP 状态均为 200,Safari 浏览器再次显示加载栏,直到超时。我也试过让 Safari 只访问一个没有其他代码的 phpinfo() 文件,同样的事情也会发生。
【问题讨论】:
检查你的密码套件! ssl 密码为:“EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE -RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA :DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3 -SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES :!MD5:!PSK:!RC4"; 另外,以防万一,我在切换到 http/2 期间没有更改密码。除了启用 HTTP/2 的行之外,没有任何配置。在我们使用相同密码的 SPDY 运行标准 HTTPS 之前。 是的,但是 HTTP/2 对密码更严格。使用 SSL Qualys 检查在 Safari 中运行的启用 HTTP/2 的网站(例如 shimmercat.com)以获取正确的密码列表。您也可以查看black list,但它比较长,并没有告诉您该怎么做。 比较 SSL 质量,它们使用了一些不同的密码,但对我来说更突出的是 Safari 9 握手模拟的椭圆曲线部分的微小差异,这可能是问题吗? thephonecaseplace.com握手: “野生9 / OS X 10.11řRSA 2048(SHA256)TLS 1.2> H2 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ECDH secp256r1 FS” shimmercat.com握手:“野生9 / OS X 10.11řRSA 2048(SHA256)TLS 1.2> H2 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ECDH secp521r1 FS" 所以 secp256r1 与 secp521r1 【参考方案1】:在 ssl 参数中检查您的 ssl 协议。现代浏览器会使用 ssl procols TLSv1.1 及更高版本。但 safari 采用 TLSv1 等 ssl 协议。因此,在您的 ssl 配置中替换您的 ssl 参数并放置此代码并重新启动您的服务器
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/sslsnippet/dhparam.pem;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:!ADH:!AECDH:!MD5:!aNULL;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
并且还找到你的dhparam.pem,然后放置路径而不是上面代码中提到的我
【讨论】:
Safari 9 支持 TLS 1.2。请不要建议使用不像 TLS 1.0 或 1.1 之类的东西 如果您使用的是safari 5系列浏览器,它只支持TLSv1系列。我写这个是为了支持所有系列的旧 safari 浏览器以上是关于Http/2 站点仅在 Safari 9 上无法加载 - 在 Chrome、IE、Edge、Firefox 上加载正常的主要内容,如果未能解决你的问题,请参考以下文章
iOS 9 Safari webkit 仅在 iPad 上崩溃(iPhone 工作正常)
CORS 仅在 Firefox 和 Safari 上且仅在 onClick() 上阻止内容