https
https
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item

概念

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入TLS/SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
TLS的握手阶段是发生在TCP握手之后

作用

  • 建立一个信息安全通道,保证数据传输的安全
  • 确认网站的真实性,防止钓鱼网站。

https与http的区别:

区别
HTTP
HTTPS
协议
运行在 TCP 之上,明文传输,客户端与服务器端都无法验证对方的身份
身披 SSL( Secure Socket Layer )外壳的 HTTP,运行于 SSL 上,SSL 运行于 TCP 之上, 是添加了加密和认证机制的 HTTP。
端口
80
443
资源消耗
较少
由于加解密处理,会消耗更多的 CPU 和内存资源
开销
无需证书
需要证书,而证书一般需要向认证机构购买
加密机制
共享密钥加密和公开密钥加密并用的混合加密机制
安全性
由于加密机制,安全性强
速度
较快
因为HTTPS除了TCP握手的三个包,还要加上SSL握手的九个包。一般的HTTPS连接只在第一次握手时使用非对称加密
对称密钥加密:指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;
非对称加密:指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,非常的慢。
综上:为了时效性我们还是需要选择对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

握手分为6步

  1. 客户端给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
  1. 服务端确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
  1. 客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务端。
  1. 服务端使用自己的私钥,获取客户端发来的随机数(即Premaster secret),根据随机数 A/随机数 B/随机数 C(pre-master-key) 产生动态密钥 master-key,加密一个 finish 消息发至客户端。
  1. 客户端根据同样的随机数和算法生成 master-key,加密一个 finish 消息发送至服务端。
  1. 服务端和客户端分别解密成功,至此握手完成,之后的数据包均采用 master-key 进行加密传输。

7次握手(TCP三次+TLS四次)

浏览器请求建立SSL链接,并向服务端发送一个随机数–Client random和客户端支持的加密方法,比如RSA加密,此时是明文传输。 服务端从中选出一组加密算法与Hash算法,回复一个随机数–Server random,并将自己的身份信息以证书的形式发回给浏览器 (证书里包含了网站地址,非对称加密的公钥,以及证书颁发机构等信息)浏览器收到服务端的证书后验证证书的合法性(颁发机构是否合法,证书中包含的网址是否和正在访问的一样),如果证书信任,则浏览器会显示一个小锁头,否则会有提示用户接收证书后(不管信不信任),浏览器会生产新的随机数–Premaster secret,然后证书中的公钥以及指定的加密方法加密Premaster secret,发送给服务器。利用Client random、Server random和Premaster secret通过一定的算法生成HTTP链接数据传输的对称加密key-session key使用约定好的HASH算法计算握手消息,并使用生成的session key对消息进行加密,最后将之前生成的所有信息发送给服务端。 服务端收到浏览器的回复 利用已知的加解密方式与自己的私钥进行解密,获取Premaster secret和浏览器相同规则生成session key使用session key解密浏览器发来的握手消息,并验证Hash是否与浏览器发来的一致使用session key加密一段握手消息,发送给浏览器浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束

参考资料

 
reduxreact hook
Loading...