https常见部署问题及解决方案
在最近几年里,我写了很多有关 HTTPS 和 HTTP/2 的文章,涵盖了证书申请、Nginx 编译及配置、性能优化等方方面面。在这些文章的评论中,不少读者提出了各种各样的问题,我的邮箱也经常收到类似的邮件。本文用来罗列其中有代表性、且我知道解决方案的问题。
为了控制篇幅,本文尽量只给出结论和引用链接,不展开讨论,如有疑问或不同意见,欢迎留言讨论。本文会持续更新,欢迎大家贡献自己遇到的问题和解决方案。
实际上,遇到任何有关部署 HTTPS 或 HTTP/2 的问题,都推荐先用 Qualys SSL Labs’s SSL Server Test 跑个测试,大部分问题都能被诊断出来。
申请 Let’s Encrypt 证书时,一直无法验证通过
这类问题一般是因为 Let’s Encrypt 无法访问你的服务器,推荐尝试 acme.sh 的 DNS 验证模式 ,一般都能解决。
网站无法访问,提示 ERR_CERTIFICATE_TRANSPARENCY_REQUIRED
使用 Chrome 53 访问使用 Symantec 证书的网站,很可能会出现这个错误提示。这个问题由 Chrome 的某个 Bug 引起,目前最好的解决方案是升级到 Chrome 54+。相关链接:
- Out of date Chrome results in ERR_CERTIFICATE_TRANSPARENCY_REQUIRED for Symantec operated sites ;
- Warning | Certificate Transparency error with Chrome 53 ;
浏览器提示证书有错误
首先确保网站使用的是合法 CA 签发的有效证书,其次检查 Web Server 配置中证书的完整性(一定要包含站点证书及所有中间证书)。如果缺失了中间证书,部分浏览器能够自动获取但严重影响 TLS 握手性能;部分浏览器直接报证书错误。
如果只有老旧浏览器(例如 IE8 on Windows XP)提示这个错误,多半是因为你的服务器同时部署了使用不同证书的多个 HTTPS 站点,这样,不支持 SNI(Server Name Indication)的浏览器通常会获得错误的证书,从而无法访问。
要解决浏览器不支持 SNI 带来的问题,可以将使用不同证书的 HTTPS 站点部署在不同服务器上;还可以利用 SAN(Subject Alternative Name)机制将多个域名放入同一张证书;当然你也可以直接无视这些老旧浏览器。特别地,使用不支持 SNI 的浏览器访问商业 HTTPS CDN,基本都会因为证书错误而无法使用。
有关 SNI 的更多说明,请看「 关于启用 HTTPS 的一些经验分享(二) 」。
启用 HTTP/2 后网站无法访问,提示 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
这个问题一般是由于 CipherSuite 配置有误造成的。建议对照「 Mozilla 的推荐配置 、 CloudFlare 使用的配置 」等权威配置修改 Nginx 的 ssl_ciphers
配置项。
有关这个问题的具体原因,请看「 从启用 HTTP/2 导致网站无法访问说起 」。
网站无法访问,提示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
出现这种错误,通常都是配置了不安全的 SSL 版本或者 CipherSuite —— 例如服务器只支持 SSLv3,或者 CipherSuite 只配置了 RC4 系列,使用 Chrome 访问就会得到这个提示。解决方案跟上一节一样。
还有一种情况会出现这种错误 —— 使用不支持 ECC 的浏览器访问只提供 ECC 证书的网站。例如在 Windows XP 中,使用 ECC 证书的网站只有 Firefox 能访问(Firefox 的 TLS 自己实现,不依赖操作系统);Android 平台中,也需要 Android 4+ 才支持 ECC 证书。如果是这种情况,有一个比较完美的解决方案,请看「开始使用 ECC 证书」。
在 Nginx 启用 HTTP/2 后,浏览器依然使用 HTTP/1.1
Chrome 51+ 移除了对 NPN 的支持,只支持 ALPN,而浏览器和服务端都支持 NPN 或 ALPN,是用上 HTTP/2 的大前提。换句话说,如果服务端不支持 ALPN,Chrome 51+ 无法使用 HTTP/2。
OpenSSL 1.0.2 才开始支持 ALPN —— 很多主流服务器系统自带的 OpenSSL 都低于这个版本,所以推荐在编译 Web Server 时自己指定 OpenSSL 的位置。
详见「 为什么我们应该尽快支持 ALPN 」。
升级到 HTTPS 后,网站部分资源不加载或提示不安全
记住一个原则:HTTPS 网站的所有外链资源(CSS、JS、图片、音频、字体文件、异步接口、表单 action 地址等等)都需要升级为 HTTPS,就不会遇到这个问题了。
详见「 关于启用 HTTPS 的一些经验分享(三) 」。
本文链接: https://imququ.com/post/troubleshooting-https.html , 参与评论 »
— EOF —
转载请注明:https常见部署问题及解决方案 - 编程知识库
您可能还会对这些文章感兴趣
2016-12-23 144次iPhone用户人均每天遭电话骚扰1次
12月23日,腾讯手机管家发布的一份报告显示,平均每个iPhone用户每天至少会收到一次垃圾来电骚扰;iOS骚扰诈骗电话标记分布城市中,上海以诈骗电话58.1万、骚扰电话5.5万,排名第一,其次为深圳、北京和广州;iPhone男显然比iPhone女更难以忍受电话的骚扰。 从”...
2016-12-23 125次【msn退出中国市场】MSN中文网即将关闭退出中国市场
【咕噜网编辑】你像一只蝴蝶飞来,又像一只蝴蝶飞走了。 近日,MSN中文网发布公告称,MSN中文网将于2016年6月7日停止提供简体中文服务,用户仍然可以继续访问其推荐的其他网站。 MSN中文网是时尚生活,白领门户。凭借对都市白领人群的持续关注,MSN中文网已经成为...
2016-12-21 76次优酷LOGO换了,新造型该给打几分?
100天前,优酷曾暗示将更换LOGO,今天优酷新LOGO正式亮相,依旧是红蓝配色,但新LOGO看起来更符合当下的审美,slogan也从“世界都在看”变成“这世界很酷”。优酷此次改变为的是在文化产业爆发下,更加迎合年轻人的口味,借助阿里的体系尝试更多的玩法。 10年前的12月21...
2016-12-20 112次谷歌 2016 年发布的 7 款超酷的开源项目
开放源代码软件让 Google 能够无需重新发明轮子就能够快速有效地进行开发,也让我们能够集中注意力来解决新问题。我们知道,支持开源,就是站在了巨人的肩膀上,所以 Google 员工能够轻松地将他们在内部工作的项目作为开放源代码发布。 我们已经发布了超过2000万行的...
大家正在看
- linux 系统中Mysql 进程占用cpu过高的解决
- 二类电商是什么意思? 二类电商有哪些?暴利二类电商还好做吗?
- 【二类电商广点通投放指南】二类电商广点通投放值不值
- 密码保护:支付宝突破微信封锁唤起支付宝代码
- Host is not allowed to connect to this MySQL server解决方法
- 密码保护:移动端js自动复制代码
- linux数据库调优,WordPress MySQL占用cpu高数据库优化
- 2017 年十大网页设计趋势
- 网页端的VR实现离我们还远么?
- 最完整的Chrome浏览器客户端调试大全
- iPhone用户人均每天遭电话骚扰1次
- 3G电子化销售服务系统
- Java WeakReference的理解与使用
- 搞清楚 Python traceback