整站HTTPS并不像你想象的那么简单,电子商务网站负责维修站的安全性和性能。
浏览:44 时间:2024-4-9

注意:众所周知,数据HTTP传输过程会遇到一系列问题,如劫持,篡改,监控,窃取等。这个问题的解决方案是进行HTTPS转换。

HTTPS的作用是在会话层和表示层引入TLS/SSL握手协议,并应对通过数据加密和解密传输明文数据时遇到的问题,以确保数据的完整性和一致性,并且带来更多用户。安全的Web体验和更好的隐私保护。

但是,HTTPS添加了TLS/SSL握手,并且应用程序数据传输需要对称加密,这对性能提出了更大的挑战。

作为一个好的架构,有必要平衡安全性和性能。如果你让Libra在任何一方都倾斜太多,它将影响最终的用户体验。

因此,为了平衡安全性和性能,苏宁的全站点HTTPS转换始于2015年底,并持续了一年多,主要从事系统HTTPS转换,HTTPS性能优化和HTTPS灰度在线三个方面,允许用户使用HTTPS。下次访问可以获得终极体验。

全站点HTTPS解决方案概述

苏宁易购在2015年开始计划做与HTTPS相关的事情。当时,几乎没有可借鉴的信息,很难找到与电子商务网站相关的HTTPS转型的详细案例。

如下图所示,它是苏宁易购的HTTPS解决方案:

如图所示,整个方案分三步构建,即系统转换,性能优化和灰度在线:

系统转型。原始系统要支持HTTPS,必须进行修改。首先,必须建立HTTPS访问层,即打开端口443,以便所有应用程序都支持HTTPS访问。

基于此,页面资源替换用于解决HTTPS页面上发生HTTP请求时的错误问题。完成这两件事后,将解决CDN上的证书处理问题和HTTPS测试计划。

性能优化。进行系统转换并添加两个TLS握手将不可避免地导致一些开销和性能损失。如何弥补性能损失并实现性能和安全性?性能优化部分包含几个优化点,将在下面详细讨论。

灰度即将到来。这部分是最贵的时间。在HTTPS踩到线路的过程中,大多数坑,其中一些以前没有找到。

这证明了整个站点,所有区域和所有用户不能同时堆积成HTTPS,并且灰度可以根据运营商以及城市和用户的流量水平来完成。

HTTPS解决方案的系统转换

01,HTTPS访问层定义

系统转型的第一个重点是端口443的开放。成熟的网络系统将包括CDN,硬件负载平衡,应用防火墙,Web服务器,应用服务器,最后到数据层。整个链接是否为HTTPS?每层都消耗了SSL握手吗?答案是不。

因此,应尽早完成SSL握手。 SSL过程的主要考虑因素是HTTPS访问层的定位。

如下所示,Suning Tesco架构中HTTPS访问层的位置:

如图所示,我们使用四层+七层负载平衡架构将HTTPS访问层放在CDN和应用程序系统之间。

四层加载不处理HTTPS卸载,其主要职责是进行TCP分发。整个SSL握手在七层加载完成,后一个应用系统转到端口80,这相当于完​​成整个HTTPS卸载过程。

这样做的好处是,一方面,系统应用层不需要对HTTPS进行任何调整;另一方面,未来所有HTTPS的调度,优化和配置都可以在接入层完成。

02,页面资源更换

第一步是了解混合内容

对于页面,请求页面的请求使用HTTPS加载。一旦内部页面元素具有HTTP的性质,RFC标准中将出现一个名为Mixed Content的错误。

因此,如果要加载安全的HTTPS页面,则不应混淆那里的HTTP请求。

第二步,//替换http://

用//替换http://,以便可以调整页面的所有元素以遵循原始请求。

第三步,x-request-url的定义和使用

当然,我们在//替换过程中也遇到了一些问题。例如,下图显示了苏宁易购单点登录系统交互的过程:

如图所示,当用户authID到期并且启动请求https://xxx.suning.com/authStatus时,访问层将卸载所有请求,并且该地址将变为HTTP。

进入业务系统进行身份验证后,Reponse 302将跳转到单点登录系统。此时,第二步的页面被记录为原始页面,并且用户返回到用户终端,并且用户请求单点登录系统。在单点登录系统完成身份验证后,然后跳回,它是HTTP地址,最终导致用户端MixContent。 。

因此,我们引入x-request-url来解决问题,如下所示:

所有原始请求协议都记录在x-request-url中。如果业务系统经过身份验证,则必须遵循x-request-url记录的协议来处理由跳回引起的用户端混合内容问题。

03,原始//

无法识别应用程序的问题

浏览器识别//,但是应用程序无法识别的原因//很简单,因为浏览器本身会适应。

当时,苏宁的服务器有一个系统,它提供了一个接口,为每一端提供图像。在HTTPS转换之后,PC端和客户端都没有问题。但是第二天,许多用户突然无法加载图像,因为在原始APP的情况下无法识别请求。

此处的解决方案只能由客户端开发人员进行调整。下图是App无法识别//:

的示例

04.如何处理商业CDN上的证书和私钥?

CPN证书的处理是大多数小型互联网公司面临的问题。因为这些小企业不像阿里和京东,他们可以自己建立CDN,苏宁也是如此。

苏宁的CDN包括自建和商业。一旦使用商业CDN,它将面临HTTPS如何通过的问题。

只要企业将私钥提供给第三方或供应商,所有供应商的CDN服务器就无法控制它。当黑客攻击供应商的服务器时,加密是没有意义的,因为私钥已被泄露。

如下图所示,业界公认的应对方式有:双证书策略,四层加速和无钥匙解决方案。

双证书策略。它的想法很简单,相当于用户到CDN端,提供加密和解密的CDN证书。从CDN到应用程序服务器,应用程序自己的证书用于加密和解密。

这样,可以保证不向CDN供应商提供应用程序端的密钥,但基本问题仍未解决,即CDN制造商的证书仍有泄漏的可能性。如果泄露,客户仍将受到影响。

四层加速。许多CDN供应商都能够提供TCP加速,动态,恢复和优化。无论请求缓存如何,CDN供应商只执行四层模式和TCP代理。

这消除了向CDN供应商公开证书的需要。此方法适用于动态源请求,例如添加购物车,提交订单,登录等。

无钥匙解决方案。适用于财务,提供实时计算密钥服务器。

当CDN想要使用私钥时,必要的参数通过加密通道传递给密钥服务器,密钥服务器计算结果并返回。

05,HTTPS测试策略

在介绍新协议时,如何测试它?主要步骤如下:

源代码扫描。当开发人员完成资源替换时,Jenkins遍历代码库,shell脚本扫描出HTTP链接。

扫描页面抓取工具。我们将编写一些爬虫脚本来扫描测试环境的链接。

测试环境验证。自动化测试很好,但仍需要手动覆盖主要核心流程,以防止HTTPS对页面加载产生未知影响。

如果使用HTTPS访问某些页面,则系统可能不支持HTTPS,必须手动验证。

在线预发射和排水测试。将修改后的HTTPS版本发送到在线专线对用户没有影响,因为用户仍在使用HTTP流量。

您可以选择在线预发行方式。在预验证完成之后,用户的流量通过301从HTTP切换到HTTPS。这将在灰度级之后进行深入解释。

此外,我们还引入了排水测试系统:

它的想法很简单,根据域名,用户请求捕获,将所有捕获的流量放入Copy Server进行扩展,放大几次,然后通过Sender发送回系统。

通过这种方式,用户的实际流量可用于验证HTTPS功能和性能的影响。

HTTPS解决方案的性能优化

在我们讨论如何优化HTTPS的性能之前,让我们看一下整个TLS握手过程,如下所示:

如图所示,在握手过程的最坏情况下,它分为八个步骤:

将Syn包发送到Web客户端,将SynAck发送并确认到服务器,然后发送HTTP请求。

HTTP转换HTTPS,需要做302或301跳转。

用户再次发送HTTPS请求并进行TCP握手。

做TLS完全握手的第一阶段,Clienthello到服务器你好。

当证书首次到达客户端时,客户端需要完成验证过程并执行CA域名解析。

第二次,TLS握手。

在线证书合法性验证的过程。

TLS完全握手的第二阶段,底部灰色部分是真实的数据通信。

Suning Tesco的全站点HTTPS解决方案在性能优化方面做了很多工作,例如HSTS,会话恢复以及合理使用Ocsp装订,例如客户端HTTPS性能,HttpDNS解决DNS攻击劫持和其他优化。

01,合理使用HSTS

Web安全协议HSTS的目的是强制客户端(如浏览器)使用HTTPS创建与服务器的连接。

优点是减少HTTP执行302跳转的开销。 302跳转不仅暴露了用户对站点的访问,而且还容易被中间人劫持(降级劫持,中间人攻击),最重要的是降低访问速度(影响性能)。

缺点是在最大期限到期时间内HSTS在客户端被强制为HTTPS,服务器无法控制它。

因此,当需要降级时,HTTPS无法及时切换到HTTP。当然,您也可以通过手动动态手动配置max-age的值,这样您就可以通过将max-age设置为0来实现降级。

此外,HSTS是严格的HTTPS。一旦网络证书出错,网页将无法直接访问(用户不能选择忽略它)。

02,合理使用Session简历

客户端和客户端,客户端和服务器完成第一次TLS握手后,第二次数据传输是否还需要TLS握手?

您可以在此处使用会话多路复用方法。在首次发布HTTPS时,会涵盖会话恢复,这是RFC标准中长期定义的一种机制。

会话重用有两种方法:会话ID和会话票证。下图显示了实施过程:

会话ID。使用clienthello中的会话ID查询服务器的会话缓存。如果服务器具有相应的缓存,请使用现有会话信息提前完成握手。这称为简化握手。

会话ID是TLS协议的标准字段,市场上的所有浏览器都支持会话ID。应该注意的是,在多个机器和多个进程之间共享ssl会话对于集群环境来说是没有意义的。

因此,这里需要实现多机共享会话ID。可以放在redis中,nginx提供了一个专用于Session ID的模块ssl_session_fetch_by_lua_block。

会话门票。会话票证是会话ID的补充。服务器将会话信息加密为票证并将其发送到浏览器。浏览器在发出后续握手请求时发送票证。如果服务器可以成功解密并处理票证,则可以完成简化的握手。

显然,会话票证的优点是它不需要服务器消耗大量资源来存储会话内容。但是,会话票证只是TLS协议的扩展。目前的支持率不是很宽,只有约60%。

您还需要维护加密和解密的全局KEY。您需要考虑KEY的安全性和部署效率。

03,合理使用Ocsp装订

Ocsp全名在线证书状态检查协议(rfc6960),用于在CA站点查询证书状态,例如证书是否已被撤销,是否已过期等。

通常,浏览器使用OCSP协议发起查询请求,CA返回证书状态内容,浏览器接受证书的真实性。

如下所示,它是Ocsp实现过程:

此过程非常耗时,因为CA站点可能在国外,导致网络不稳定和大量RTT。有没有办法不直接从CA站点请求OCSP内容?

Ocsp装订可以做到这一点。 ocspstapling的原理只是服务器替换客户端以完成CA验证证书的过程,从而节省了客户端的时间开销。

也就是说,当浏览器启动clienthello时,它将携带证书状态请求的扩展。在看到扩展名后,服务器直接将OCSP内容返回给浏览器以完成证书状态检查。

由于浏览器不需要直接在CA站点查询证书状态,因此该功能对于访问速度非常明显。

HTTPS方案的灰度在线文章

灰线可以遵循灰度,退化和开合三个原则。灰度原则意味着整个在线过程是根据区域,版本和用户级别执行灰度,并且由灰度级收集的用户数据确定整个计划的进度。

降级原则确保操作的每个步骤都是可逆的和可卷曲的,即对延伸部分开放并且对修改是封闭的,这是可重复使用设计的基石。

01,HTTPS开关控制

在HTTPS交换机控制方面,苏宁主要构建三个主要交换机:内容管理,CDN和客户端:

内容管理开关。内容管理交换机的作用是确保可以替换所有操作维护链接。

CDN开关。从HTTP到HTTPS的每个页面都需要进行301次跳转,这些都是在CDN中配置的。

客户端切换。它是Mobile Acceleration SDK的转换。

02.在线过程中遇到的新问题

完成交换机控制后,在正式上线的过程中,我遇到了一些新问题,如:推荐人,DNS劫持,HTTPS性能监控等。

引荐

目前,大多数浏览器在协议降级时默认不发送Referrer信息。最典型的情况是,当从HTTPS页面链接跳转到HTTP网站时,浏览器不会在请求标头中引入Referer字段。当Referrer无法接受时,它会对大数据产生很大影响,因为无法跟踪流量来源。

对于现代浏览器,可以通过向页面添加以下元标记来解决此问题:

DNS劫持

DNS劫持是指非法解析域名的过程,导致请求被解析为错误的节点以用于某些恶意目的。当我们使用HTTP时,DNS异常可能不会影响请求的功能,但HTTPS肯定无法响应,因为非法节点没有证书和私钥。

苏宁的方法是通过一些波浪测量来监控DNS的正常性。如下图所示,我们观察到苏宁中国博物馆在某一地区有大量的DNS解析异常。

DNS劫持对用户有很大影响。一旦页面无法打开,用户将认为此页面存在问题,并且不会进行二次访问。

如下图所示,这是苏宁易购在河北的问题:

如图所示,页面的整个框架都在那里,但是没有图片,最终由DNS劫持决定。

这里的解决方案是建立一个完整的风险控制系统,在全国范围内构建波浪测试节点,完成整个请求图片,页面记录和保存,如下图所示:

当时,河北省用户提出请求后,TCP无法建立连接,无法使用SSL握手。原因是DNS劫持被映射到非法错误节点。

响应方法仍然是我刚才提到的降级方法。根据IP判断,河北移动的用户已将HTTPS降级为HTTP,其他地方继续使用HTTPS策略。在本地操作员解决问题后,恢复它。

HTTPS性能监控

如下图所示,它是苏宁易购移动终端的监控页面:

HTTPS灰度中最重要的一个就是要做好监控工作。它必须具有监控范围。要进行灰度,您必须在上线时分析业务,性能,场外和场外交付,CPS和其他数据。

在所有数据分析正常后,该区域将根据APP的版本和用户级别逐步扩展和部署。

HTTPS未来展望

这是一个基于UDP的低延迟Internet传输层协议:QUIC(快速UDP Internet连接)。

TCP/IP协议套件是Internet的基础。此UDP协议由Google提出,旨在取代TCP协议。

对于这两种协议,UDP更轻,错误检查少得多,但可靠性比TCP弱。目前,对于QUIC协议,一些外国公司正处于试用阶段,强调安全和握手都不会影响原有的传输,这可能是未来的发展方向。

作者:朱毅全

资料来源:以上内容由编辑王雪岩根据老师在WOTA2017“电子商务推广背后的技术挑战”中的讲话编辑。