深刻理解HTTPS工做原理

前言

近几年,互联网发生着翻天覆地的变化,尤为是咱们一直习觉得常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在将来的几年内全面取代HTTP成为传输协议的主流。html

读完本文,但愿你能明白:前端

  • HTTP通讯存在什么问题
  • HTTPS如何改进HTTP存在那些问题
  • HTTPS工做原理是什么

想阅读更多优质文章请猛戳GitHub博客,一年五十篇优质文章等着你!git

1、什么是HTTPS

HTTPS是在HTTP上创建SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。如今它被普遍用于万维网上安全敏感的通信,例如交易支付方面。github

HTTPS主要做用是:算法

(1)对数据进行加密,并创建一个信息安全通道,来保证传输过程当中的数据安全;浏览器

(2)对网站服务器进行真实身份认证。安全

咱们常常会在Web的登陆页面和购物结算界面等使用HTTPS通讯。使用HTTPS通讯时,再也不用http://,而是改用https://。另外,当浏览器访问HTTPS通讯有效的Web网站时,浏览器的地址栏内会出现一个带锁的标记。对HTTPS的显示方式会因浏览器的不一样而有所改变。性能优化

2、为何须要HTTPS

在HTTP协议中有可能存在信息窃取或身份假装等安全问题。使用HTTPS通讯机制能够有效地防止这些问题,接下来,咱们先来了解下 HTTP协议存在的哪些问题:服务器

  • 通讯使用明文(不加密),内容可能被窃听

因为HTTP自己不具有加密的功能,因此也没法作到对通讯总体(使用HTTP协议通讯的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未通过加密的报文)方式发送markdown

HTTP明文协议的缺陷是致使数据泄露、数据篡改、流量劫持、钓鱼攻击等安全问题的重要缘由。HTTP协议没法加密数据,全部通讯数据都在网络中明文“裸奔”。经过网络的嗅探设备及一些技术手段,就可还原HTTP报文内容。

  • 没法证实报文的完整性,因此可能遭篡改

所谓完整性是指信息的准确度。若没法证实其完整性,一般也就意味着没法判断信息是否准确。因为HTTP协议没法证实通讯的报文完整性,所以,在请求或响应送出以后直到对方接收以前的这段时间内,即便请求或响应的内容遭到篡改,也没有办法获悉。 换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是先后相同的

  • 不验证通讯方的身份,所以有可能遭遇假装

HTTP协议中的请求和响应不会对通讯方进行确认。在HTTP协议通讯时,因为不存在确认通讯方的处理步骤,任何人均可以发起请求。另外,服务器只要接收到请求,无论对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)

HTTP协议没法验证通讯方身份,任何人均可以伪造虚假服务器欺骗用户,实现“钓鱼欺诈”,用户没法察觉。

反观HTTPS协议,它比HTTP协议相比多了如下优点(下文会详细介绍):

  • 数据隐私性:内容通过对称加密,每一个链接生成一个惟一的加密密钥
  • 数据完整性:内容传输通过完整性校验
  • 身份认证:第三方没法伪造服务端(客户端)身份

3、HTTPS如何解决HTTP上述问题?

HTTPS并不是是应用层的一种新协议。只是HTTP通讯接口部分用SSL和TLS协议代替而已。

一般,HTTP直接和TCP通讯。当使用SSL时,则演变成先和SSL通讯,再由SSL和TCP通讯了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP

在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。也就是说HTTP加上加密处理和认证以及完整性保护后便是HTTPS

HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性

1.解决内容可能被窃听的问题——加密

方法1.对称加密

这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就没法对密码解密,反过来讲,任何人只要持有密钥就能解密了

以对称加密方式加密时必须将密钥也发给对方。可究竟怎样才能安全地转交?在互联网上转发密钥时,若是通讯被监听那么密钥就可会落人攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。

方法2.非对称加密

公开密钥加密使用一对非对称的密钥。一把叫作私有密钥,另外一把叫作公开密钥。顾名思义,私有密钥不能让其余任何人知道,而公开密钥则能够随意发布,任何人均可以得到

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用本身的私有密钥进行解密。利用这种方式,不须要发送用来解密的私有密钥,也没必要担忧密钥被攻击者窃听而盗走。

非对称加密的特色是信息传输一对多,服务器只须要维持一个私钥就可以和多个客户端进行加密通讯。

这种方式有如下缺点:

  • 公钥是公开的,因此针对私钥加密的信息,黑客截获后可使用公钥进行解密,获取其中的内容;
  • 公钥并不包含服务器的信息,使用非对称加密算法没法确保服务器身份的合法性,存在中间人攻击的风险,服务器发送给客户端的公钥可能在传送过程当中被中间人截获并篡改;
  • 使用非对称加密在数据加密解密过程须要消耗必定时间,下降了数据传输效率;

方法3.对称加密+非对称加密(HTTPS采用这种方式)

使用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可使得传输的内容不能被破解,由于就算你拦截到了数据,可是没有对应的私钥,也是不能破解内容的。就好比说你抢到了一个保险柜,可是没有保险柜的钥匙也不能打开保险柜。那咱们就将对称加密与非对称加密结合起来,充分利用二者各自的优点,在交换密钥环节使用非对称加密方式,以后的创建通讯交换报文阶段则使用对称加密方式

具体作法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,而后对方用本身的私钥解密拿到“对称的密钥”,这样能够确保交换的密钥是安全的前提下,使用对称加密方式进行通讯。因此,HTTPS采用对称加密和非对称加密二者并用的混合加密机制。

2.解决报文可能遭篡改问题——数字签名

网络传输过程当中须要通过不少中间节点,虽然数据没法被解密,但可能被篡改,那如何校验数据的完整性呢?----校验数字签名。

数字签名有两种功效

  • 能肯定消息确实是由发送方签名并发出来的,由于别人假冒不了发送方的签名。
  • 数字签名能肯定消息的完整性,证实数据是否未被篡改过。

数字签名如何生成:

将一段文本先用Hash函数生成消息摘要,而后用发送者的私钥加密生成数字签名,与原文文一块儿传送给接收者。接下来就是接收者校验数字签名的流程了。

校验数字签名流程

接收者只有用发送者的公钥才能解密被加密的摘要信息,而后用HASH函数对收到的原文产生一个摘要信息,与上一步获得的摘要信息对比。若是相同,则说明收到的信息是完整的,在传输过程当中没有被修改,不然说明信息被修改过,所以数字签名可以验证信息的完整性。

假设消息传递在Kobe,James两人之间发生。James将消息连同数字签名一块儿发送给Kobe,Kobe接收到消息后,经过校验数字签名,就能够验证接收到的消息就是James发送的。固然,这个过程的前提是Kobe知道James的公钥。问题的关键的是,和消息自己同样,公钥不能在不安全的网络中直接发送给Kobe,或者说拿到的公钥如何证实是James的。

此时就须要引入了证书颁发机构(Certificate Authority,简称CA),CA数量并很少,Kobe客户端内置了全部受信任CA的证书。CA对James的公钥(和其余信息)数字签名后生成证书。

3.解决通讯方身份可能被假装的问题——数字证书

数字证书认证机构处于客户端与服务器双方均可信赖的第三方机构的立场上。

咱们来介绍一下数字证书认证机构的业务流程:

  • 服务器的运营人员向第三方机构CA提交公钥、组织信息、我的信息(域名)等信息并申请认证;
  • CA经过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的全部权等;
  • 如信息审核经过,CA会向申请者签发认证文件-证书。证书包含如下信息:申请者公钥、申请者的组织信息和我的信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。 其中签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,而后,采用 CA的私钥对信息摘要进行加密,密文即签名;
  • 客户端 Client 向服务器 Server 发出请求时,Server 返回证书文件;
  • 客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算获得信息摘要,而后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,若是一致,则能够确认证书的合法性,即服务器的公开密钥是值得信赖的。
  • 客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任CA的证书信息(包含公钥),若是CA不被信任,则找不到对应 CA的证书,证书也会被断定非法。

4、 HTTPS工做流程

1.Client发起一个HTTPS(好比https://juejin.cn/user/4283353031252967)的请求,根据RFC2818的规定,Client知道须要链接Server的443(默认)端口。

2.Server把事先配置好的公钥证书(public key certificate)返回给客户端。

3.Client验证公钥证书:好比是否在有效期内,证书的用途是否是匹配Client请求的站点,是否是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操做系统内置的Root证书或者Client内置的Root证书)。若是验证经过则继续,不经过则显示警告信息。

4.Client使用伪随机数生成器生成加密所使用的对称密钥,而后用证书的公钥加密这个对称密钥,发给Server。

5.Server使用本身的私钥(private key)解密这个消息,获得对称密钥。至此,Client和Server双方都持有了相同的对称密钥。

6.Server使用对称密钥加密“明文内容A”,发送给Client。

7.Client使用对称密钥解密响应的密文,获得“明文内容A”。

8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,而后Server使用对称密钥解密密文,获得“明文内容B”。

5、HTTP 与 HTTPS 的区别

  • HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

关于安全性,用最简单的比喻形容二者的关系就是卡车运货,HTTP下的运货车是敞篷的,货物都是暴露的。而https则是封闭集装箱车,安全性天然提高很多。

  • HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
  • HTTPS须要用到SSL证书,而HTTP不用;
  • HTTPS标准端口443,HTTP标准端口80;
  • HTTPS基于传输层,HTTP基于应用层;
  • HTTPS在浏览器显示绿色安全锁,HTTP没有显示;

6、为什么不全部的网站都使用HTTPS

既然HTTPS那么安全可靠,那为什么不全部的Web网站都使用HTTPS?

首先,不少人仍是会以为HTTPS实施有门槛,这个门槛在于须要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。

其次,HTTPS广泛认为性能消耗要大于HTTP,由于与纯文本通讯相比,加密通讯会消耗更多的CPU及内存资源。若是每次通讯都加密,会消耗至关多的资源,平摊到一台计算机上时,可以处理的请求数量一定也会随之减小。但事实并不是如此,用户能够经过性能优化、把证书部署在SLB或CDN,来解决此问题。举个实际的例子,“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操做的顺畅、平滑。经过测试发现,通过优化后的许多页面性能与HTTP持平甚至还有小幅提高,所以HTTPS通过优化以后其实并不慢。

除此以外,想要节约购买证书的开销也是缘由之一。要进行HTTPS通讯,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。

最后是安全意识。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推进的。

给你们推荐一个好用的BUG监控工具Fundebug,欢迎免费试用!

欢迎关注公众号:前端工匠,你的成长咱们一块儿见证!

image

参考文章与书籍

相关文章
相关标签/搜索