苏宁易购的全站 HTTPS 方案在性能优化方面做了很多事情,如 HSTS、Session resume、Ocsp stapling 的合理使用,如客户端 HTTPS 性能、HttpDNS 解决 DNS 攻击劫持等优化。 01、HSTS 的合理使用 Web 安全协议 HSTS 的作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。 优点是减少 HTTP 做 302 跳转的开销。302 跳转不仅暴露了用户的访问站点,也很容易被中间者劫持(降级劫持、中间人攻击),最重要是降低了访问速度(影响性能)。 缺点是 HSTS 在 max-age 过期时间内,在客户端是强制 HTTPS 的,服务端无法控制。 因此,当需要降级时,HTTPS 无法及时切换到 HTTP。当然你也可以通过手动动态去配置 max-age 的值,这样可以通过将 max-age 设置为 0 来达到降级效果。 还有 HSTS 是严格的 HTTPS,一旦网络证书错误时,网页将直接无法访问(用户无法选择忽视)。 02、Session resume 的合理使用 当用户端和客户端、客户端和服务端完成第一次 TLS 握手之后,第二次数据传输还需要 TLS 握手吗? 这里可以采用 Session 复用的方式。Session resume(会话复用),是 RFC 标准中早就定好的一个机制,HTTPS 最初发布时就已经涉及其中。 Session 复用有 Session ID 和 Session tickets 两种方式,下图是实现流程:
Session ID。使用 clienthello 中的 session ID 查询服务端的 session cache,如果服务端有对应的缓存,则直接使用已有的 session 信息提前完成握手,称为简化握手。 Session ID 是 TLS 协议的标准字段,市面上的浏览器全部都支持 Session ID。需要注意的是,单机多进程间共享 ssl session 对集群环境是没有意义的。 因此,在这里需要实现多机共享 Session ID。可以放在 redis 中,nginx 提供了专门处理 Session ID 的模块 ssl_session_fetch_by_lua_block。 Session tickets。Session tickets 是会话 ID 的一种补充,server 将session 信息加密成 ticket 发送给浏览器,浏览器在后续握手请求时会发送 ticket,server 端如果能成功解密和处理 ticket,就能完成简化握手。 显然,session ticket 的优点是不需要服务端消耗大量资源来存储 session 内容。但是 session ticket 只是 TLS 协议的一个扩展特性,目前的支持率不是很广泛,只有 60% 左右。 还需要维护一个全局的 KEY 来加解密,需要考虑 KEY 的安全性和部署效率。 03、Ocsp stapling 的合理使用 Ocsp 全称在线证书状态检查协议 (rfc6960),用来向 CA 站点查询证书状态,比如证书是否被撤销,是否已经过期等。 通常情况下,浏览器使用 OCSP 协议发起查询请求,CA 返回证书状态内容,然后浏览器接受证书是否可信的状态。 如下图,是 Ocsp 实现流程:
这个过程非常消耗时间,因为 CA 站点有可能在国外,导致网络不稳定,RTT 也比较大。那有没有办法不直接向 CA 站点请求 OCSP 内容呢? ocsp stapling 就能实现这个功能。ocspstapling 的原理简单来说是服务端代替客户端完成 CA 校验证书的过程,节省用户端的时间开销。 就是当浏览器发起 clienthello 时会携带一个 certificate status request 的扩展,服务端看到这个扩展后将 OCSP 内容直接返回给浏览器,完成证书状态检查。 由于浏览器不需要直接向 CA 站点查询证书状态,这个功能对访问速度的提升非常明显。 HTTPS 方案之灰度上线篇 灰度上线可遵循灰度、降级和开闭三大原则。灰度原则是指整个上线过程要按区域、版本、用户等级来进行灰度,通过灰度收集上来的用户数据来决定整个计划的进行。 降级原则保证每一步的操作都是可逆可回滚的,即对扩展开放,对修改关闭,这是可复用设计的基石。 01、HTTPS 开关控制 HTTPS 开关控制方面,苏宁主要建设内容管理、CDN、客户端三大开关: 内容管理开关。内容管理开关的作用是保证所有运营维护的链接都可以被替换。 CDN 开关。每个页面,从 HTTP 到 HTTPS 都需要做 301 跳转,这些跳转都配置在 CDN 中。 客户端开关。就是移动加速 SDK 的开关。 02、上线过程中遇到的新问题 做完开关控制,在正式上线的过程中,又遇到了一些新问题如:Referrer、DNS 劫持、HTTPS 性能监控等。 Referrer (责任编辑:admin) |