快捷搜索:  汽车  科技

https详解(轻松搞懂HTTPS工作原理)

https详解(轻松搞懂HTTPS工作原理)SSL和TSL是一种安全协议。SSL和TSL位于传输层之上,在数据到达传输层之前都会经过SSL/TSL协议层处理,由SSL/TSL保证数据的机密性和完整性。什么是SSL/TSLHTTPS是在HTTP协议上加了SSL加密层HTTPS与HTTP的区别HTTP直接与TCP层通信,而HTTPS在SSL层通信,然后由SSL层与TCP层通信,可以理解为HTTPS = HTTP SSL

目录
  • 概述
  • 已有HTTP,为何还要HTTPS?
  • HTTPS是什么?
  • SSL/TSL中的加密技术
  • HTTPS如何解决内容可能被窃听的问题
  • HTTPS如何解决报文可能遭篡改问题
  • HTTPS如何解决通信方身份可能被伪装的问题
  • HTTPS工作流程
  • php7进阶到架构师相关阅读
概述

这是关于php进阶到架构之后端开发必备学习的系列课程:深入浅出,轻松搞懂HTTPS工作原理

学习目标:

  1. 了解HTTPS工作原理
  2. 掌握HTPPS采用对称加密非对称加密两者并用的混合加密机制的思想,日后工作中涉及安全方面可以运用此机制
已有HTTP,为何还要HTTPS?

HTTP存在哪些问题?

  1. 信息是通过明文传输(不加密),内容可能被窃听
  2. 无证确保报文的完整性(信息的准确度),内容可能被篡改
  3. 不能验证通信方的身份,可以被伪装,存在被“钓鱼欺诈”的可能

为了解决以上问题,于是就有了HTTPS。

HTTPS是什么?

HTTPS是在HTTP协议上加了SSL加密层

https详解(轻松搞懂HTTPS工作原理)(1)

HTTPS与HTTP的区别

HTTP直接与TCP层通信,而HTTPS在SSL层通信,然后由SSL层与TCP层通信,可以理解为HTTPS = HTTP SSL

什么是SSL/TSL

SSL和TSL是一种安全协议。SSL和TSL位于传输层之上,在数据到达传输层之前都会经过SSL/TSL协议层处理,由SSL/TSL保证数据的机密性和完整性。

SSL/TSL中的加密技术

SSL/TSL安全协议保证数据安全的技术基础就是加密算法。

接下来,我们先了解一些跟HTTPS有关的加密算法的知识。

对称密钥加密

对称加密就是加密和解密使用同一个密钥的加密技术

https详解(轻松搞懂HTTPS工作原理)(2)

对称加密

在对称加密中,发送端和接收端使用相同的密钥进行通信。

发送端使用共享的密钥发送报文,然后将密文发送到接收端。

接收端使用相同密钥解密密文,恢复原始数据。

非对称密钥加密

非对称加密,加密和解密使用使用不同密钥的加密技术

https详解(轻松搞懂HTTPS工作原理)(3)

非对称加密

非对称加密技术使用了不同的密钥进行通信。

在发送端使用公钥对报文进行加密(公钥就是所有人都可以获取到的密钥),

然后在接收端使用私钥对加密的密文进行解密

HTTPS如何解决内容可能被窃听的问题

HTTPS采用对称加密和非对称加密两者并用的混合加密机制

对称密钥的好处是解密的效率比较快,但是如何安全告知对方密钥就成了问题。

这个问题可以使用非对称加密算法,因为就算你拦截到了数据和公钥(公钥用来加密数据),但是没有对应的私钥,也是不能破解内容的。

具体做法:

发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,

然后对方用自己的私钥解密拿到“对称的密钥”,

这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信

HTTPS对报文的内容使用对称加密算法,即加密和解密是同一个密钥。

同时对称加密使用的密钥通过非对称加密,确保对称加密的密钥是安全的。

这样既保证了数据的安全性(非对称加密保证了对称密钥传输的安全),又提高了效率(对称加密比非对称加密速度快)。

HTTPS如何解决报文可能遭篡改问题

网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改,那如何校验数据的完整性呢?----校验数字签名。

数字签名是附加在报文上的特殊加密校验码。数字签名可以防止报文被篡改,如果有恶意攻击在传输过程在篡改了报文,那么校验的时候校验和就不再匹配,因此可以确认报文被篡改了。

数字签名如何生成?

https详解(轻松搞懂HTTPS工作原理)(4)

数字签名生成流程

传输的报文 哈希(对称加密的密钥)=> 消息摘要(即传输的密文,可以通过对称密钥解密)

消息摘要 私钥加密(或公钥加密)=>数字签名

注意:

非对称加密是公钥加密则私钥解密,私钥加密则公钥解密。

私钥和公钥是一对,谁都可以加解密。

HTTPS将【消息摘要(对称加密的报文) 数字签名】一起传送给接收方。那对方如何校验签名呢?

数字签名如何验证?

假设接收方接收到的信息摘要为A,

接收方用公钥将获得的数字签名进行解密,得到解密后的消息摘要,设为B

如果解密后的消息摘要和接收的消息摘要相同(即A=B),则签名验证通过,

否则验证签名不通过。

这样就解决了报文可能遭篡改的问题

HTTPS如何解决通信方身份可能被伪装的问题

假设客户端C和服务器端S通信,

服务端S将消息连同数字签名一起发送给客户端C,客户端C接收到消息后,

通过校验数字签名,就可以验证接收到的消息就是服务端S发送的。

当然,客户端C和服务器端S通信的前提是客户端C知道服务端S的公钥。但客户端C拿到的公钥如何证明是服务端S的呢?

此时就需要引入了证书颁发机构(Certificate Authority,简称CA),CA数量并不多,客户端C内置了所有受信任CA的证书。CA对服务器端S的公钥(和其他信息)数字签名后生成证书。

数字证书认证机构的业务流程

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

https详解(轻松搞懂HTTPS工作原理)(5)

HTTPS工作流程

  1. Client发起一个HTTPS(比如https://juejin.im/user/5a9a9cdcf265da238b7d771c)的请求
  2. Server把事先配置好的公钥证书(public key certificate)返回给客户端
  3. Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面等。如果验证通过则继续,不通过则显示警告信息。
  4. Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。
  5. Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。
  6. Server使用对称密钥加密“明文内容A”,发送给Client
  7. Client使用对称密钥解密响应的密文,得到“明文内容A”。
  8. Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”
php7进阶到架构师相关阅读

https://www.kancloud.cn/gofor/gofor

最后,欢迎大家留言补充,讨论~~~

猜您喜欢: