相关背景知识
要说清楚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和SSL/TLS协议的背景和基础的更多相关文章

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

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  2. 好程序员带你了解一下HTTPS和SSL/TLS协议的背景与基础

    >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其 ...

  3. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  4. 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  5. 【转】聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  6. HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  7. 聊聊HTTPS和SSL/TLS协议 【基础入门】

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  8. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理

    转自:https://blog.csdn.net/andylau00j/article/details/54583769 本系列的前一篇,咱们聊了“密钥交换的难点”以及“证书体系”的必要性.今天这篇来 ...

  9. [转]浅谈https\ssl\数字证书

    浅谈https\ssl\数字证书 http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html 全球可信的 ...

随机推荐

  1. language level in Intellij IDEA

    The Language level setting sets which features the code assistance in the editor should support. For ...

  2. Eclipse中的文件导航插件StartExplorer

    在Eclipse里面,想找到文件的位置是件麻烦的事,需要借助插件,我用的是StartExplorer插件. StartExplorer官方地址:http://startexplorer.sourcef ...

  3. java分享第八天-01(线程)

     创建线程:1 可以实现Runnable接口.2 可以扩展Thread类本身. 通过实现Runnable创建线程:创建一个线程,最简单的方法是创建一个实现Runnable接口的类.为了实现Runnab ...

  4. jqgrid cellEdit为true的时候,默认选中单元格值的解决方案

    jqgrid cellEdit为true的时候,点击单元格的时候,鼠标在单元格最前面闪. 这时候如果要修改数字内容,非常麻烦.要全选单元格内容,不然不好改. 点击单元格的时候,默认选中单元格值的解决方 ...

  5. phpcmsv9多表联合查询分页功能实现

    phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊.不支持多表查询并分页. 看了一下前台模板层支持get标签,支持多表查询,支持分页.刚好可以把这个功能搬到后台来使用. 我们现在对g ...

  6. java并发编程(四)守护进程 线程阻塞的四种情况

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981 守护线程   Java中有两类线程:User Thread(用户线程).Da ...

  7. seajs实现JavaScript 的 模块开发及按模块加载

    seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...

  8. bzoj1724: [Usaco2006 Nov]Fence Repair 切割木板(贪心+堆)

    一开始被题目读错题= =以为每次只能割一块,那么就是从大到小切 但是其实是可以分为几堆来切的 所以可以逆着来,变为合并n个木板代价最小 易证每次找最小的两堆合并代价最小 用优先队列维护堆..偷偷懒= ...

  9. 【emWin】例程八:绘制位图

    实验指导书及代码包下载: 链接:http://pan.baidu.com/s/1bpeMYpp 密码:wgtp 实验现象:

  10. js 打印

    关于js打印很简单的一段代码 function doPrint() { var newWindow = window.open("打印窗口", "_blank" ...