浅谈HTTPS和SSL/TLS协议的背景和基础

相关背景知识
要说清楚HTTPS协议的实现原理,至少要需要如下几个背景知识。
大致了解几个基础术语(HTTPS、SSL、TLS)的含义
大致了解HTTP和TCP的关系(尤其是"短连接"和"长连接")
大致了解加密算法的概念(尤其是"对称加密和非对称加密")
大致了解CA证书的用途

考虑到很多的技术菜鸟不可能了解到上述的背景,我想用最简单的文字描述一下。如果你自己认为自己不是菜鸟,请略过此文,直接看"HTTP协议的需求"。

HTTPS:
首先,HTTP是一个网络协议,是专门用来帮你传输WEB内容的,关于这个协议,就算你不知道,至少听说过吧。
比如说:http://www.baidu.com。http就是协议部分,大部分的网站就是通过HTTP协议来传输WEB页面、以及WEB页面上的各种东西。

SSL、TLS:SSL是杨文"Secure Sockets Layer"的缩写,中文叫"安全套接层"。有网景公司设计。顺便插一句,网景公司不关发明了SSL,还发明了很多WEB基础的设施(CSS样式和JS脚本)。
为啥发明SSL这个协议呢?因为原来互联网使用的HTTP协议是用明文写的,存在很多的缺点,比如说传输内容会被偷窥。和篡改。发明SSL协议,就是说为了解决这个问题。
到了1999年,SSL因为应用广乏,已经成为了互联网的标准,IETF就是在那年把SSL标准化的。标准化之后的名称改为TLS。叫做"传输层安全协议"。
很多的相关文章吧这两者并称为(SSL/TLS)。因为这两者可以看成是同一个东西的不同的阶段。
3.HTTPS是啥意思?
解释完HTTP和SSL/TLS,现在就可以来解释HTTPS了。咱们通常说HTTPS协议。说变了就是HTTP协议和SSL/TLS协议的组合。
你可以把HTTPS大致理解为-"HTTP over SSL"和"HTTP over TLS"(反正SSL和TLS差不多)
说说HTTP的特点
作为背景知识姐好啊,还需要再稍微读一下HTTP协议的本身的特点。HTTP本省有很多特点,考虑到篇幅有限,我制度那些和HTTPS相关的特点。
1.HTTP的版本和历史
如今我们用的HTTP协议,这个版本号是2.0。之前还有三个版本1.1和0.9和1.0。其中0.9倍广乏使用。1.0也是。
HTTP和TCP关系
简单来说,TCP协议就是HTTP协议的基础-HTTP协议需要依赖TCP协议来传输数据。
在网络的分层中,TCP被称为"传输层协议",HTTP被称为"应用层协议"。
有很多的常用的应用协议是以TCP为基础的,比如说"FTP、SMTP、POP、IMAP"等。
TCP被称为"面向连接"的传输层协议。关于他的具体的细节,我就不张开了。你只需要知道:传输层主要有两个协议:TCP和UDP。TCP比UDP更加的可靠。你可以把TCP协议想象成某个水管。发送端这边进水,先发送的数据线到达。(UDP不能保证这一点)。
TCP是克劳连接,不丢包。UDP不能保证。
3.HTTP协议如何使用TCP连接?
HTTP对TCP连接的使用,分为两种方式:"短连接","长连接"(持续连接),杨文叫做keep alive。
假设一个网页,里面有很多的图片和css文件和js文件。
在短连接的模式下,浏览器将会先发出一个TCP连接,拿到这个网页的HTML源代码(拿到HTML之后,这个TCP连接就关闭了)。然后,浏览器开始分析这个网站的源码,知道这个页面包含很多的外部的资源。图片、资源、css、js。然后针对每一个外部资源,在分别发起一个TCP连接,把这些文件获取到本地(同样的,没抓取一个外部资源后,相应的TCP就会断开)
相反,如果是"长连接"的方式,浏览器也会先发起一个TCP连接去赚取页面,单是抓取页面之后,该TCP连接并不会立即关闭,而是暂时先保持着,然后浏览器分析HTML源码之后,发现有很多的外部资源,就用刚才的那个TCP连接去抓取这个页面外部资源。

在HTTP1.0,默认使用的是"短连接",那个时候是WEB诞生初期,网页相对比较简单,"单链接"的问题不大。

到了1995年底开始自定HTTP1.1草案的是,网页开始变的复杂,(脚本和样式越来越多),这个时候再用短连接的方式,效率太低了。因为TCP连接是有时间成本的CPU成本的。所以在HTTP1.1中,默认采用的是keep-alive。
关于keep-alive的更多的介绍,可以百度。
1.啥是加密和解密:通俗来说,你可以把"加密"和"解密"理解成某种互逆的数学过程。就好比加法和减法的运算。乘法和除法的运算。"加密"的过程就是把明文变成"密文"。反之,"解密"就是把密文转化成明文。
这两个过程中,需要有一个关键的东西:秘钥。
2.啥是"对称加密"
所谓的"对称加密技术"。意思是"加密"和"解密"使用相同的秘钥。这个比较好理解。
就好比你用7zip或者winrar创建一个带密码的加密压缩吧。当你再次要把这个压缩包文件解开的时候,你需要输入相同的密码。在这个例子中,密码口号就相当于刚才说的秘钥。
3.啥是非对称加密
所谓的"非对称加密技术"。意思就是"加密"和"解密"使用。这玩意比较那理解。也比较难想象。当年的"非对称加密"的发明。还被誉为"密码学"历史的一次革命。
犹豫篇幅有限,对"非对称加密"这个话题,我就不详述了。
4.各自有啥优缺点
看完这个定义,很显然,"非对称加密"能干的事情比"对称加密"要多。这是"非对称加密"的优点。但是"非对称加密"的实现,通常需要涉及到"复杂数学问题"。所以,"非对称加密"的性能通常要差很多。
这两者的优缺点,也影响到SSL协议的涉及。
HTTPS学医的需求是啥
现在是正题了。先啦说说当初涉及HTTPS是为了满足那些需求的?
很多介绍HTTPS的文章一上来就是说很多的细节。个人觉得:这不是一个号的做法。
因为是现有HTTP再有HTTPS。所以,HTTPS的设计者肯定要考虑到对源头的HTTP的兼容性。
这里所说的兼容性包含很多的方面。比如说有的WEB应用要竟可能的迁移到HTTPS;再比如说对浏览器厂商来说,改动要尽可能的小。基于"兼容性"方面的考虑,很容易得出如下几个结论:
1.HTTPS还是要给予TCP来传输
(如果改成UDP作为传输层),无论是WEB服务器还是浏览器客户端,都得大改,改动太大了。
单独使用一个新的协议,吧HTTP协议包裹起来。
所谓的HTTP over SSL,实际上是在原有的基础上家里一层SSL的封装。HTTP协议原有的GET、POST之类的机制,原封不动。
打个比方。如果原来的HTTP是塑料水管没在包一层金属水管,一来原来的塑料水管照常运行,而来,用金属加固的,不容易抽破。
前面说了,HTTPS相当于"HTTP over SSL"。
如果SSL这个协议在"可扩展性"方面上涉及足够NB,那么除了能和HTTP搭配,还能干和其他的应用层协议搭配。不是很完美吗?
现在看来,当初设计SSL的人确实比较NB之外,如今SSL/TLS可以和很多的常用的应用层搭配,来强化这个协议的安全性。

接着刚才的比方,如果把SSL、TLS是做是一根用来加固的金属管,他不仅可以用来加密输水的管道,还可以用来加固输煤气的管道。
保密性
HTTP需要做到足够好的保密性。
说道保密性,说先需要能够对抗嗅探sniffer。所谓的嗅探,通俗的就是监视你的网络传输流量,如果你是使用明文的HTTP上网的话,那么监视着通过嗅探,就知道你在访问的那些网络的那些页面了。
嗅探是最低级的攻击手法。除了嗅探,HTTPS还需要对抗其他的一些稍微高级的攻击手法,比如"重放攻击"。
完整性:除了保密性,还有一个同样重要的目标是确保完整性。
在发明这个HTTPS之前,由于HTTP是明文的,不但容易被嗅探,还容易被篡改。
举个栗子:
比如咱们的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某个网站是没有广告的,竟然会跳出很多中国电信的广告。为啥会这样子呢?应为你的网络流量需要经过ISP的线路才能到达公网。如果你使用的明文的HTTP,ISP很容易就在你的访问的页面中植入广告。
所以,当初设计HTTPS的时候,还有一个需求是"确保HTTP协议的内容不被篡改"。
当谈到HTTPS的需求的时候,"真实性"经常被忽略。其实"真实性"的重要程度不亚于前面的"保密性"和"完整性"。
举个栗子:
你因为使用网银,需要访问该网银的WEB网站。那么,你如何确保你访问的网站确实是你想要访问的网站呢?
有些同学说:通过看域名,因为DNS系统本身是不可靠的,尤其在设计SSL的那个年代,脸你看到的网站的域名未必是真是的。
所以,HTTPS协议必须是有某个机制来确保"真实性"的需求。
性能:
再来说最好一个需求--性能
引入HTTP之后,不能导致性能变得太差,否则的话,谁还用啊。
为了确保性能,SSL的设计者至少要考虑如下几点:
如何选择加密算法
如何兼顾HTTP采用的"短连接"TCP方式
SSL是在1995年之前开始设计的,那个时候的HTTP版本还是1.0,默认使用的是"短连接"的TCP方式,默认不适用keep-alive。
小结:以上就是设计SSL协议的时候,必须要兼顾的各种需求。
设计HTTP协议的主要难点
设计HTTPS这个协议,有好几个难点。
我个人认为最大的难点在于"秘钥交换"
在传统的密码学场景中,假设张三要和李四建立一个加密通讯的渠道,双方事先要约定好使用哪种加密算法。同事也要约定好使用的秘钥是山?在这种场景中,加密算法的乐行让旁人知道,没太大关系,但是秘钥千万不能躺叛忍知道,一旦旁人知道,自然可以破解通讯的密文,得到明文。
当你访问某个公网的网站,你的浏览器和网站的服务器之间,如果要建立加密通讯,必然要商量好双方使用啥算法。啥秘钥。在网络的通讯术语中。这个过程叫做"三次握手"。
在握手过程中,因为加密方式没有协商好,所以握手阶段必定是明文的。既然是明文,自然就有被第三方偷窥的可能。然后,还要考虑到双方之间间隔一个互联网,什么样的都有可能发生。
因此,在握手过程中,如何做到安全的交换秘钥信息,而不是让周围的第三方看到,这个就是设计HTTP最大的难点。连接了这些,你才能知道,为啥当初要把协议设计成这样子。

原文地址:https://www.cnblogs.com/jiaoxiangjie/p/5809566.html