深入浅出HTTPS协议

背景

被同事分派要分享一篇技术文章,首先这是个好事儿 :),我是极力支持,也希望大家多踊跃输出共同学习提高。

关于选择这个主题,第一个原因:唯医的站点全都切换为HTTPS协议。第二个原因,主流站点及第三方的接口交互等基本都在采用HTTPS、或在采用HTTPS的路上。(你可以带着问题,例如:为什么主流网站要用。当然如果没有答案,可以留言)

关于技术文章,身为一个技术从业者,向来感觉枯燥、头大。尤其术语、缩写较多或是牵出很多上下文,如果没有一个简短通俗的解释,就会像拉线头似的,又拉出许多知识点。越读越乱,只得全部梳理下来才能整明白怎么回事。鉴于大家都不喜欢这样的文章,我会尽最大~~~~~可能用最~~~通俗、通俗 、通俗的话和图,让看的人都能整明白,毕竟是一篇技术文章,考虑受众,我会分为两个版本,大话版(简单了解)、进阶版(深入了解)。只要是HTTPS逃不过的范畴,我都会介绍,反之,我都会忽略(意味着你也可以忽略,并不影响阅读理解HTTPS),尽可能的减少不相干的概念,当然如果你认为还是需要在某个扩展点深入,那就不在本节的范畴了,我只想做到HTTPS知识点中的东西,通过这一篇你就整明白了,当然我不保证我说的对(欢迎大家指正) - -!,好了,我猜想我上面的废话大家看起来并不吃力,让我们开始HTTPS旅程吧~。

目录

我想让读的人都能整明白,计划从以下几个方面进行重点阐述:

一、HTTPS是什么

SSL协议是什么

加密算法

证书签名

二、HTTPS的优缺点

三、为什么要用HTTPS

四、如何合法充当中间人(无大话版)

五、怎么应用HTTPS(无大话版)

内容

一、HTTPS是什么?

大话:

HTTP(全称:Hyper Text Transfer Protocol),叫超文本传输协议,这是什么?忽略它,对,我就这么告诉你。可以把它理解为浏览器向服务器通讯的管道。

别和我说HTTP,嗯,我和你说HTTPS,就是多了个S。这个S是SSL(全称:Secure Sockets Layer)又叫安全套接层。层?我们不聊这个,我们说安全,安全就是加了密码了,不让你知道我银行卡密码,就是这样。

小结:

HTTPS 就是浏览器内的信息加个密,有密码的与服务器进行通讯,总之很安全?是的,恭喜你,你知道了HTTPS是什么。

进阶:

我们知道HTTP是无状态的,端口为80。无状态是什么?好,同样是忽略它。HTTPS是由SSL+HTTP协议构建的的加密传输、身份认证的网络协议,端口号:443。

1. SSL协议是什么

SSL位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持,怎么提供?让我们来刨~~~~,SSL协议有三个特性:机密性、可靠性、完整性。 就是SSL协议使用密钥加密通信数据。服务器和客户都会被认证,客户的认证是可选的。SSL协议会对传送的数据进行完整性检查。有这三个特性来保证数据通讯的安全支持。

SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。另一个是SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。什么,你和我谈加密算法?容我慢慢解释。

2.加密算法

这个HTTPS老听说它安全(安全就是和密码挂勾),所以得提及一下加密算法。加密通常分为两类:对称与非对称。对称理解就是两个相同的,反之就是非对称了。- -!嗯,因为对称使用的是一把钥匙,很相同是吧,一起用。而非对称确将钥匙分为两把美名曰:公、私钥。存在即是合理,下面我们各抓一个主流典型来描述。

对称算法里,目前主流代表AES(全称:Advanced Encryption Standard)。优点:算法公开,计算量小,加密速度快,加密效率高。缺点:钥匙会在网络中传输,安全性低。

非对称算法算法里,目前主流代表RSA(全称:Rivest-Shamir-Adlemand)仨人名。优点:刚说两把钥匙,叫公钥的随便在网上传,私钥收起来,不会在网络中传输,安全性高。缺点:加解密速度慢。同样也是目前唯一既能用于密钥交换也能用于证书签名的算法。好了,加密算法介绍完成。等等,证书签名是什么?

3.证书签名

为什么又提这东西?这东西有什么用?我会在为什么HTTPS安全中介绍。我们先看看证书,在这儿的证书指的是SSL证书,证书长下图这样。这东西不白给,你以为会技术,就啥钱都不想花?在公网上流动的是需要受信任的第三方,也就是CA(全称:Certificate Authority)证书授权机构来做这个证书的发放,与合法性校验。可以只关注三个信息点,颁给的是哪儿:*.allinmd.cn,颁发者是GeoTrust(全球第二大数字证书颁发机构)。第三个有效期决定你的证书在公网上管多长时间。

二、HTTPS的优缺点?

大话:

优点:

看的见的:有一小锁,写着"安全",协议是https也是能看见。

看不见的:加了密我知道,嗯,就这样。

来与HTTP协议做个比较,来看下面HTTP协议的,未加小锁,显示"不安全",协议HTTP默认不显示。

缺点:

看的见的:

唯医站点全做了,找不到了。我从其它站点上找了个。来看看下图,虽然是HTTPS,却未显示小锁,意味着报警,当然也不能说缺点,只是里面存在HTTP协议的内容。

看不见的:访问速度会较HTTP有所延迟,S不白加。

小结:HTTPS有小锁,写着安全。有着你基本可以忽略的延迟。

进阶:

优点:

HTTP2协议只支持HTTPS加密连接,H2是建立在HTTPS的SSL层上。

iOS和安卓都要求使用HTTPS加密,2017年所有iOS应用必须支持(ATS-App Transport Security),强制使用HTTPS安全连接。而Android P计划也将全面阻止HTTP请求。

HTTPS加密使网站速度更快,这种情况发生在一些大公司的内部局域网,因为通常情况下,网关会截取并分析所有的网络通信,遇到HTTPS时,直接放行,因为无法解读。

HTTPS加密有利于提升网站搜索排名,搜索引擎认为(百度、谷歌)权值相同的站点,采用https协议的页面更加安全,排名上会有优先对待。

HTTPS加密防止中间人流量劫持,小锁的作用发挥了。

缺点:

需所有CDN节点支持,嗯,不然浏览器报警。

兼容性及周边,嵌入资源需调整为HTTPS,同样道理。

c.多次握手,网络耗时变长,带S了嘛。可以看到,TLS建立加了11ms时长。蚂蚁小,也是肉?

等等,不是说SSL吗,怎么又出来TLS?

补充说明:

在1999年,SSL因为应该广泛,已经成为互联网上的事实标准。IETF(全称:The Internet Engineering Task Force)国际互联网工程任务组。就在这年把SSL标准化。标准化之后的名称改为TLS(全称:Transport Layer Security),叫做传输层安全协议,所以理解为和SSL是一个事儿,通常情况会见SSL/TLS写法。

三、为什么要用HTTPS?

大话:

看上面说的因为它多了S,加了密了。这样,别人就偷不了我的信息。是的,就是这样,就像《潜伏》中,你和我各有一个密码本。然后,互相公布一段信息,用密码本对着就可以进行破译,了解真实想传达的信息。如果别人截获了的话,没有密码本,也不理解是什么意思。而HTTP没有密码本这个东东,所以需要明文传送,这样别人截获了的话,就了解了这段信息的内容(包括帐号、密码、私密信息)等。听起来,是不是感觉以前像在裸奔?为了将正确的信息传达给正确的人,所以我们决定采用HTTPS。

进阶:

这就是安全,当如果有人尝试截获,就会报警。看上去好安全~~~。

我看明白了,用HTTPS就是用它的安全,是的,就是这样。那为什么安全。让我们来详细拆解下。

正常HTTP请求,是由客户端发起,向服务器端传递信息。而服务器端也通过客户端的具体请求,返还给客户端所需要的信息。纯纯的~~你单纯的就像HTTP,是的,因为HTTP是无状态的,它根本不关注是谁或去哪儿。就是单纯的应答机,我不能说这不好,只能怪社会太复杂。

HTTP的意图,是最直接的,好,我加个中间人。

好吧,HTTPS有什么不一样的?

全程数据都是在加密的过程中进行的,看上去好厉害。

你说HTTP不安全,是指加中间人来拦截,那HTTPS,同样可以仿照中间人来拦截,模拟公私钥的和进行密钥传输。你说的没错!是时候请出证书了。

再看这个图,是不是有点像国家单位或NB企业。由它来做第三方,总之就是我们都信它,这样的话,我们再看来中间人还能好使吗?中间人当然也可以伪造证书,但你伪造的证书不能通过CA。这时客户端/服务端就会知道通信被劫持了,会话终止。中间人根本碰不到数据。这就是证书的威力。这也就是我们要用它原因。

总结:

非对称算法(公、私钥)+数字证书(验证身份,验证公钥是否伪造)+对称算法(将数据用密钥加密进行传输)=安全。

四、如何合法充当中间人

现在的情况是,我们是合法的人,想要抓取一些数据供自己分析。这时我们就可以采取Fiddler/Charles等第三方协议工具。其实就是用它们充当中间人(可疑:上面说安全,中间人也不行,现在又要说充当中间人,容我慢慢解释)。好,我们看下,充当后,客户端发生什么?

这时我们看到远端地址变为本机地址及8888端口代理。

那充当中间人的原理是什么呢?

中间人就是对客户端说我是服务端,对服务端说我是客户端。

HTTPS的关键是证书,我们先看下代理后的证书长什么样?以大家熟知的Charles举例。看到了颁发者是Charles Proxy CA。

整个步骤是这样的:

如下图就是需要信任中间人证书,在添加例外中操作。

所以基于以上这个后加的步骤,前提是客户端信任并安装协议代理中间人的证书,不然没戏。这样是不是就可以解释HTTPS很安全,可以防止中间人,又可以合法的充当中间人了?

五、怎么应用HTTPS?

先解释下,我们会将证书配在Nginx上。什么,你不是说服务器吗?你不是说去CA颁布给服务器吗?是的,是这样的,服务器与CA交互这个阶段,事实就是将公钥放在数字证书中,实际上,我们没必要每一次连接都去做一次这事儿,你说呢?所以我们可以精简这一步骤,将数字证书提前放在服务器上。然后,我就放在服务器上单台还好说,如果是多台 、集群,那是不是要每台都放,会不会觉得同步证书或是证书管理都不方便?所以我们只要让Nginx做反向代理,就可以只做这一把就O了,后续管理证书也很方便,对吧?

明白了为什么放在Nginx上,那就直接上代码,看写些什么。以唯医为例:

我们已知HTTPS是 443端口,所以写监听这个端口号。

到此,HTTPS就讲解分析完成,欢迎大家留言补充没有讲到的或是校正不对的。

本文作者:WEB研发部-乔亮

---------- END ----------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180810G0E3QT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券