终于搞明白了https的底层请求流程

Posted java叶新东老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终于搞明白了https的底层请求流程相关的知识,希望对你有一定的参考价值。

http和https区别

网络请求方式通常分为两种,分别是HTTP请求和HTTPS请求,其中HTTP的传输属于明文传输,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的超文本传输协议,其传输的内容是通过加密得到的,所以说是一种安全的传输;

HTTP 的缺点

  1. 通信使用明文(不加密),内容可能会被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以有可能已遭篡改

SSL/TSL

为了解决 HTTP 协议的以上缺点,在上世纪90年代中期,由网景(NetScape)公司设计了 SSL 协议。SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。

到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。

互联网加密协议历史:

  • 1994年,NetScape 公司设计了 SSL 协议的1.0版,但是未发布。
  • 1995年,NetScape 公司发布 SSL 2.0版,很快发现有严重漏洞。
  • 1996年,SSL 3.0 版问世,得到大规模应用。
  • 1999年,互联网标准化组织 ISOC 接替 NetScape 公司,发布了 SSL 的升级版 TLS 1.0 版。
  • 2006年和2008年,TLS 进行了两次升级,分别为 TLS 1.1 版和 TLS 1.2 版。最新的变动是2011年 TLS 1.2 的修订版。

目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

所谓的 HTTPS 其实是“HTTP over SSL”或“HTTP over TLS”,它是 HTTP 与 SSL/TLS 的结合使用而已。

加密算法的分类

https是对称和非对称两种加密算法组合起来一起使用的,

  • 对称加密:发送方和接收方共用一把密钥,不太安全
  • 非堆成加密:发送方持私钥,接收放持公钥,私钥加密的数据只能由公钥进行解密,相反的,公钥加密的数据也只能由私钥解;
对称加密算法

常用的有:RC4、DES、3DES、AES、ChaCha20

非对称加密算法

常用的有:DH、DSA、RSA、 ECC

默认端口

  • http请求的默认端口为80端口,也就是说,当我请求 http://yexindong.com时,其实是请求了这个网站的80端口,也就是这样的 http://yexindong.com:80
  • https的默认端口为443端口,当我请求 https://yexindong.com时,其实是请求了这个网站的80端口,也就是这样的 https://yexindong.com:443

443端口能改吗?

能改,但是改了之后就不能用了;因为当我们去请求一个https协议的网站时,浏览器会直接去请求 服务器的443 端口,找不到这个端口就会返回错误;这是浏览器已经约定好的; 除非在访问的时候加上端口号 :https://www.yexindong.com:444

证书的签发过程:

  1. 服务方 Server 在自己的计算机上生成一对密钥:公钥和私钥
  2. 服务方 Server 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
  3. CA 通过线上、线下等多种手段验证申请者Server提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
  4. 如信息审核通过,CA 会向申请者Server签发认证文件–也就是ca证书。这个ca证书是由 ca机构 自己的私钥生成的,既然是ca机构的私钥生成的,那就要用ca机构的公钥才能解开(客户端【浏览器】会内置CA的证书信息【包含公钥】);

ca证书内容

证书包含以下信息:

  1. 申请者公钥
  2. 申请者的组织信息
  3. 申请者个人信息
  4. ca机构信息
  5. 有效时间
  6. 证书序列号
  7. 信息明文
  8. 签名

https 请求流程

  1. 客户端client 向服务器 server 发出https请求时,server返回ca证书文件(证书中有server的公钥);
  2. 客户端client 使用根证书验证 ca 证书合法性,(刚刚说过客户端会内置信任 CA 的根证书信息(包含公钥)),就是由这个根证书去验证的;
  3. 客户端 client 生成一个随机值 N ,在通过证书中的公钥对这个随机值 N 进行加密,得到一个非对称密钥,最后发给服务器;
  4. 服务器server 收到这个这个非对称密钥后,使用自己的私钥进行解密,得到了随机值 N 的值;
  5. 客户端 client 和 服务端 server 从此以后都使用这个随机值 N 进行对称加密进行通讯;
  6. 服务端 server 将真实数据进行对称加密后,得到一串密文,发给客户端 client
  7. client 端收到密文后,使用随机值 N 对密文进行解密,得到真实数据;

为什么后面使用对称加密? 而不使用非对称加密?

非对称加密所消耗的时间和资源更大,效率也不高,所以在认证成功之后,服务器和客户端就开始按照约定的随机值 N ,对后续的数据传输都使用对称加密。

为什么需要 CA 认证机构颁发证书?

HTTP 协议被认为不安全是因为传输过程容易被监听者勾线监听、伪造服务器,而 HTTPS 协议主要解决的便是网络传输的安全性问题。

首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的“中间人攻击(黑客)”问题。

以上是关于终于搞明白了https的底层请求流程的主要内容,如果未能解决你的问题,请参考以下文章

终于搞明白了https的底层请求流程

终于搞明白了https的底层请求流程

终于搞明白了https的底层请求流程

redis源码阅读二-终于把redis的启动流程搞明白了

redis源码阅读三-终于把主线任务执行搞明白了

redis源码阅读四-我把redis6里的io多线程执行流程梳理明白了