苏宁易购 朱羿全:苏宁易购全站HTTPS实践之路

守绍元

2017/11/14 发布于 技术 分类

HTTPS 能够给用户带来更安全的网络体验、更好的隐私保护。然而,HTTPS 增加了 TLS 握手环节,再加上应用数据传输需要经过对称加密,对性能提出了更大的挑战。作为一个好的架构,一定要均衡安全和性能两方面,如果让天秤向任何一方倾斜过多,都会影响最终的用户体验。因此,为了兼顾安全与性能,苏宁的全站HTTPS改造从2015年底开始进行,历时一年多时间,主要包括了三方面工作:(1)系统HTTPS改造;(2)HTTPS性能优化;(3)HTTPS灰度上线。让用户在HTTPS访问下的极致体验成为可能。

文字内容
1. SACC2017
2. 为什么我们要使用HTTPS? 01 苏宁易购全站HTTPS方案概述 SACC2017HTTPS系统改造篇 HTTPS性能优化篇 02 03 04 HTTPS灰度上线篇 05
3. 为什么S我A们C要C使2用01H7TTPS
4. 篡改 监听 劫持 X SA文CX明C传2输017X 窃取 X
5. SACC2017
6. 苏宁易购S全A站CHCT2T0PS1方7案概述
7. 苏宁易购全站HTTPS方案概述 系统 改造 HTTPS 方案 性优S化能 ACC2017 灰度 上线 上线计划 苏宁易购 朱羿全
8. HTSTAPSC系C统2改0造17篇
9. HTTPS接入层定义 • 尽早完成SSL握手 • 统一接入与调度,业务系统不需要做调整 • 统一优化与升级,提高接入层性能与安全性 手机用户 PC用户 公网 .jpg/css/js/html 命中静态缓存 DMZ层 SACC2017HTTPS接入层 .do/json/jsonp… 动态回源请求 4层负载均衡 7层负载均衡 CDN 门店POS用户 苏宁易购 朱羿全 HTTPS HTTP 内网 系统A 系统B 系统C
10. 证书选择细节 证书可以分为三类: DV证书 Domain Validation Certificate OV证书 Organization Validation Certificate 2017EV证书 Extended Validation Certificate SACC根据以下四点选择证书: 1. 证书主机名匹配 2. 是否支持多域名和泛域名 3. 签名算法:散列算法建议使用SHA256 4. 证书链:递归签名,校验合法性,域名证书-中间证书-根证书 苏宁易购 朱羿全
11. 证书选择细节 多域名:suning.com、suning.cn、suning.vip 泛域名:*.suning.com的泛域名证书可以匹配 SACC2017www.suning.com、passport.suning.com等。 苏宁易购 朱羿全
12. 如何处理CDN/云上的私钥? SACC2017 苏宁易购 朱羿全
13. 如何处理商用CDN上的私钥? • 主动提供私钥给商用CDN厂商 (HTTPS不再安全) SACC2017用户 HTTPS HTTPS CDN 私钥 服务端 私钥 黑客 苏宁易购 朱羿全
14. Keyless解决方案 适用于金融,提供一台实时计算的 Key Server 。CDN 要用到私钥时,通过加密通道将必要的参 数传给 Key Server,由 Key Server 算出结果并返回即可。 https://github.com/cloudflare/keyless SACC2017 苏宁易购 朱羿全
15. HTSTAPSC性C能2优0化17篇
16. 基本的HTTP请求 SACC2017 苏宁易购 朱羿全
17. 客户端增加了传输延时 SACC2017 苏宁易购 朱羿全
18. 服务端的额外开销增加了CPU的损耗 SACC2017
19. HSTS的合理使用 Strict-Transport-Security:max-age=expireTime [; includeSubDomains] [; preload] 优 HSTS表明网站已经实现了TLS,要求 浏览器对用户明文访问的Url重写成 势 7HTTPS,避免了始终强制302重定向 SACC201的延时开销。 1. HSTS在max-age过期时间内在客户端是强制HTTPS的,服务端无法 控制。因此,需要降级时,HTTPS无法及时切换到HTTP。 2. HSTS是严格的HTTPS,一旦网络证书错误时,网页将直接无法访问 (用户无法选择忽视)。 缺 点 苏宁易购 朱羿全
20. 会话恢复的合理使用 会话恢复机制是指在一次完整协商的连接断开时,客户端和服务端会将会话的安全参数保存一段时间。后续的 连接,双方使用简单握手恢复之前协商的会话。大大减少了TLS握手的开销。 会话恢复的方案可以分为两种: 会话ID(Session ID):服务端缓存会话信息 会话票证(Session Ticket):客户端缓存会话信息 SACC2017① ②ticket ③ticket 解密成功√ 接入机集群 ssl_session_f etch_by_lua_ block ① ③ID ④ID 接入机集群 Nginx Nginx Nginx Nginx Nginx Nginx Key 1 ② 写入 cache ⑤命中 REDIS 分布式缓存 苏宁易购 朱羿全
21. Ocsp stapling的合理使用 # 启用OCSP staplingssl_stapling on; OCSP(Online Certificate # valid表示缓存5分钟, Status Protocol, 在线证书状 resolver_timeout表示网络超时时间 态协议)用于查询证书的吊销 7信息。 CC201OCSP stapling服务端可以代 SA替客户端完成证书吊销状态的 resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=300s;resolver_timeout 5s; # 启用OCSP响应验证,OCSP信息响应 适用的证书 ssl_stapling_verify on; 检测。 ssl_trusted_certificate /usr/local/nginx/ssl_cert/trustchain.crt; 苏宁易购 朱羿全
22. TLS协议的合理配置 1.指定TLS协议的版本,不安全的SSL2和SSL3要废弃掉 2.启用ssl_prefer_server_ciphers,用来告诉Nginx在TLS握手 时启用服务器算法优先 3.选择最优的加密套件以及优先顺序,具体可参考Mozilla的 7https://wiki.mozilla.org/Security/Server_Side_TLS 2014.如果有双向验证的需求,可以开启Nginx的客户端身份验证 ACC# 要求客户端身份验证 Sssl_verify_client on; # 指定客户端证书到根证书的最大证书路径长度 ssl_verify_depth 3; # 指定允许签发客户端证书的CA证书 ssl_client_certificate trustchain.crt; # 完整证书链中需要包含的其他CA证书 ssl_trusted_certificate root-ca.crt; # 证书吊销列表 ssl_crl revoked-certificates.crl;
23. SNI功能的合理使用 Nginx支持SNI的方式并自动开启。 server { listen 443 ssl default_server; ssl_certificate SNI(Server Name Indicate) /usr/local/nginx/cert/serversuning.pem; ssl_certificate_key /usr/local/nginx/cert/suning.key; 允许客户端在发起SSL握手请求 ... 时(ClientHello阶段),就提 017交请求的Host信息,使得服务 C2器能够切换到正确的域并返回相 SAC应的证书。通过这种方式解决了 } server { listen 443 ssl; server_name sit1.suning.com; ssl_certificate /usr/local/nginx/cert/serversuningcom.pem; ssl_certificate_key /usr/local/nginx/cert/suningcom.key; ... 一个IP(虚拟机)部署多个域名 } 服务的问题。 server { listen 443 ssl default_server; server_name sit1.suning.cn; ssl_certificate /usr/local/nginx/waf/serversuningcn.pem; ssl_certificate_key /usr/local/nginx/waf/suningcn.key; ... } 苏宁易购 朱羿全
24. HTTP/2&QUIC的合理使用——HTTP/2 连接 Stream 1 帧(frame): HTTP 2.0通信的最小单位, 请求消息 包括帧首部、流标识符、优先值和帧净荷等。 HEADERS帧(stream 1) 消息(message):是指逻辑上的HTTP消 :method: GET 息(请求/响应)。一系列数据帧组成了一个 7完 整 的 消 息 。 比 如 一 系 列 DATA 帧 和 一 个 01HEADERS帧组成了请求消息。 C2流(stream):流是连接中的一个虚拟信道, C可以承载双向消息传输。每个流有唯一整数标 SA识符。为了防止两端流ID冲突,客户端发起的 响应消息 :path: /index.html :version: HTTP/2.0 :scheme: https User-agent: Chrome/26.0.1410.65 HEADERS帧(stream 1) :status: 200 :version: HTTP/2.0 DATA帧(stream 1) 流具有奇数ID,服务器端发起的流具有偶数ID。 server: nginx/1.0.11 vary: Accept-Encoding 响应负荷 … 每个数据流以 消息的形式发送, 而消息由一 或多个帧组成, 这些帧可以乱序发送, 然后 根据每个帧首部的流标识符重新组装。 Stream N . . .
25. HTTP/2&QUIC的合理使用——HTTP/2 SACC2017
26. HTTP/2&QUIC的合理使用——HTTP/2 SACC2017
27. HTTP/2&QUIC的合理使用——HTTP/2优点 SACC2017多路复用共享连接 请求优先级 服务端推送 首部压缩
28. HTTP/2&QUIC的合理使用——HTTP/2 基于ALPN的协商过程 SACC2017
29. ngx_http_v2_module模块安装 SACC2017
30. HTTP/2&QUIC的合理使用——QUIC HTTP2 TLS TCP HTTP2 API SACC2017QUIC UDP 问题: 1.缺乏稳定服务端容器支持,目前caddy 2.缺乏客户端支持,目前只有Chrome 3.复杂网络环境下udp诸多限制
31. • HTTPS使DNS劫持问题扩大化 https 客户端 客户端 https DNS劫持 非法节点 SACC2017Local DNS DNS劫持 非法节点 服务端 Local DNS 无证书,无法响应
32. • HttpDNS 解决 DNS攻击劫持 ①客户端 ③ Httpdns群集 安全同步 SACC2017CDN网络 WS GLB 节点 节点 Local DNS ⑦ 苏宁易购 朱羿全
33. SACC2017 安 加 速 卓 效 果 对 比 IOS 加 速 效 果 对 比 苏宁易购 朱羿全
34. HTSTAPSC灰C度2上0线17篇
35. 原则HTTPS上S线ACC2017 灰度原则 降级原则 开闭原则 苏宁易购 朱羿全
36. HTTPS开关控制 CDN开关 内容管理平台开关 SACC2017 HTTPS 开关控制 客户端开关 苏宁易购 朱羿全
37. HTTPS性能监控 SACC2017 苏宁易购 朱羿全
38. SACC2017 苏宁易购 朱羿全
39. SACC2017
40. SACC2017