浅谈网络安全之HTTPS

前言

说到Https,对于前端工程师(Android、iOS、H5)来讲都是一个很模糊的概念。

之前,公司为了安全考虑,需要将全网从http迁移到https,那时候前端工程师也就只做了一件事:基础域名从http://xx.xx.com变成了https://xx.xx.com,非常简单的就完成了迁移,至于https到底是不是更安全了,大部分人是不清楚的。

于是,我结合了之前的一些经验和近期的总结,对大家做了一次分享,包含以下几部分:

  • 网络安全问题

  • HTTP为什么不安全

  • HTTPS为什么安全

  • SSL/TLS

  • 实践分析

内容不是很深,但绝对能让你了解HTTPS为什么安全!

网络安全问题

对于你来说,肯定碰到过浏览的网页中突然多了块广告区域,如下图所示:

《浅谈网络安全之HTTPS》 领奖图

498==iPhone 6s看着多诱人啊,不明真相的用户还以为是“官方”弄的活动,一旦点击了发生了金钱问题,就会被举报和投诉我们了。作为开发此页面的程序员来说,又得背锅lalala~

《浅谈网络安全之HTTPS》 哈哈

排查以后,你发现自己的页面中被注入了不是自己写的广告代码。究其原因就是网页使用的是http协议,在网络中是明文传输的,在传输过程中会受到各级网络运营商的劫持,又由于是明文传输,很容易就在请求的报文中插入他们的广告代码。如果被非法分子劫持,所有的数据都会是透明的,如果这是一次支付请求呢,细想一下是不是很吓人~

A:这么恐怖😱,有什么办法么?

B:将网络协议从http升级为https即可!

A:为什么呢?

B:看下面的分析,你就会明白了。

HTTP为什么不安全

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,位于网络分层的应用层。

HTTP为什么不安全,还得从网络分层开始说,网络分层图(5层)如下:

《浅谈网络安全之HTTPS》 网络分层

从上图来看,原始数据会经过应用层->传输层->网络层->连接层->物理层传输,到达目的地后反向解析物理层->连接层->网络层->传输层->应用层拿到原始数据进行处理。

在实际应用中,我们的网络请求必须通过运营商和ISP到达公网,这就给运营商和ISP机会可以拿到原始数据,再加上HTTP协议的明文传输,使其很方便就能将广告代码数据插入到原始数据中,再返回给用户看到了上面的广告。

A:原来是这样子啊,那是不是对数据加密就可以了?

B:聪明,HTTPS就是干加密这事的!

HTTPS为什么安全

HTTPS协议(Hyper Text Transfer Protocol over Secure Socket Layer,超文本传输安全协议),基于SSL/TLS认证的HTTP请求,简单来说就是安全的HTTP请求。

我们先来看HTTP基于TCP建立连接,三次握手建立连接->传输数据->四次挥手断开连接,如下图所示:

《浅谈网络安全之HTTPS》 Http建立连接过程

HTTPS是基于HTTP的,所以建立连接的过程大致相同,额外增加的是加密密钥的获取过程,如下图所示:

《浅谈网络安全之HTTPS》 HTTPS获取密钥

从上图可以简单看出,最终加密是通过对称加密完成的,但是对称加密的密钥动态生成的,通过非对称加密让客户端和服务端知晓的。

https相对于http来说都做了哪些安全保障:

  • CA证书认证,确保访问服务器和客户端的可靠性

  • 数据加密传输

A:说了这么多,里面最核心的SSL/TLS是什么?

B:简单来说SSL/TLS就是加密协议,详见下面的分析。

SSL/TLS

简介

  • 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets Layer,缩写作 SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。

  • 网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。

  • IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与 RFC 6176 (2011年3月)。

  • SSL/TLS只是一个协议,不仅仅可以用在HTTP上,还可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet、DNS等)搭配,来强化这些应用层协议的安全性。

  • 目前主流使用的是TLS1.2,最新版本是TLS1.3(2018年8月发表)

更多关于SSL/TLS的发展历程,可参考SSL/TLS发展历程

SSL/TLS在网络分层的位置

《浅谈网络安全之HTTPS》 SSL/TLS所属位置

常用的加密算法

  • 非对称加密算法:RSA,DSA/DSS

  • 对称加密算法:AES,RC4,3DES

  • HASH算法:MD5,SHA1,SHA256

TLS/SSL加密过程

《浅谈网络安全之HTTPS》 TLS/SSL加密过程

TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法,大致流程如下:

  • SSL客户端(也是TCP的客户端)在TCP链接建立之后

  • 客户端发出一个ClientHello来发起握手,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息

  • SSL的服务器端会回应一个ServerHello,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)

  • Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了

整个加密过程不是一种加密方式完成的,而是多种加密方式组合而成的,简称“密钥套件”,例如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

协议是TLS。从ECDHE开始,我们可以看到,在握手过程中,密钥将通过短暂的椭圆曲线Diffie Hellman(ECDHE)进行交换。身份验证算法是RSA。AES_128_GCM是一种批量加密算法。最后,SHA-256是散列算法。

上面的流程说明只是简单的阐述了下秘钥的交换过程,至于各种加密算法的使用和选择不在此讨论中。

实践分析

说了这么多理论,下面用一些内容来印证下(下面所有的截图来自于Charles)。

《浅谈网络安全之HTTPS》 Charles截图

思考

浅谈HTTPS就结束了,有一些问题,如果大家感兴趣可以一起交流下:

  • 为什么迁移到HTTPS的时候,除了基础域名替换外,不需要做额外的工作?

  • socket是什么,属于网络中的哪一层?

  • HTTPS一定比HTTP慢么?

  • HTTPS就一定安全么?

后记

其实想真正的了解HTTPS,需要深入理解TLS中使用的那些算法,后续会继续研究的,加个todos!

    原文作者:pphdsny
    原文地址: https://www.jianshu.com/p/45417982f62c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞