相关背景知识
要说清楚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. JSON.stringify() / JSON.parse()

    JSON.stringify() 这个方法可以把javascript对象转换成json字符串. JSON.parse() 这个方法可以把 json 字符串转换成 javascript对象. [下面来看 ...

  2. IIS运行.NET4.0配置

    IIS运行.NET4.0配置 “/CRM”应用程序中的服务器错误.配置错误说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法 ...

  3. React-Native android在windows下的踩坑记

    坑很多,跳之前做好准备.没有VPN的同学请浏览完本文后慎行.   你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载>> 注:我win7已经安装过Visual ...

  4. zeromq中两个dealer 通过一个router进行通信

    发现有童鞋不是很清楚ZMQ中的“请求-回复”模式中的ROUTER怎么用,所以简单介绍一下“请求-回复”模式的使用(最后付代码). 一.讲一讲 1.要使用zmq 通过一个router进行通信,你首先需要 ...

  5. 【hihoCoder】1033: 交错和

    初探数位dp 介绍了数位类统计的基础知识.以下列出其中的基础点: 基本问题 统计在区间[l, r]中满足条件的数的个数 思路 1. [l, r] 将问题转换为 在[0, r]中满足条件的个数 - 在[ ...

  6. HTML基础篇之列表相关标签和特殊字符实体

    HTML字符实体 常用的字符实体: 实体字符 字符实体 大于号 (>) > 小于号 (<) < 引号 (") " 注册商标(®) ® 版权(© ) © &a ...

  7. 配置webdriver环境

    安装环境pip install selenium,提示 Could not find a version that satisfies the requirement selenium (from v ...

  8. IOS 绘图教程Quartz2D

    http://www.cocoachina.com/industry/20140115/7703.html http://www.cnblogs.com/wendingding/p/3803020.h ...

  9. EntityFramework 性能优化

    1. 查询时如果不缓存数据,可以加快加载速度 //连接数据库 TestDbContext db = new TestDbContext(); //使用 AsNoTracking() 方法后将不会在 D ...

  10. JAVA基础篇NO1--环境变量的配置及命名规则

    标签(空格分隔): java基础 一:计算机概述 计算机:硬件和软件 硬件:控制器 运算器 存储器 输入和输出设备       存储器:外存(硬盘) 内存 软件:系统软件 应用软件   系统软件:wi ...