HTTPS过程

HTTPS过程

TLDR:使用非对称加密传输一个对称密钥K,让服务器和客户端都得知。然后两边都使用这个对称密钥K来加密解密收发数据。因为传输密钥K是用非对称加密方式,很难破解比较安全。而具体传输数据则是用对称加密方式,加快传输速度。两全其美。

HTTPS

HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

完整HTTPS请求过程:

  1. 浏览器请求一个url,找到服务器,向服务器发起一个HTTPS请求。
  2. 服务器将自己的证书(包含服务器公钥S_PuKey)、对称加密算法种类及其他相关信息返回客户端。
  3. 浏览器检查CA证书是不是由可以信赖的CA机构颁发的,确认证书有效和此证书是此网站的。如果不是,给客户端发一个警告,询问是否继续访问。
  4. 如果是,客户端使用公钥加密了一个随机对称密钥,包括加密的URL一起发送到服务器
  5. 服务器用自己的私匙解密了你发送的钥匙。然后用这把对称加密的钥匙给你请求的URL链接解密。
  6. 服务器用你发的对称钥匙给你请求的网页加密。你也有相同的钥匙就可以解密发回来的网页了。

v2-fbcfb4b7d254a68b4e39ddbeef776927_720w

顺便补一下数字签名:加了密的校验和

  • 证明是原作者,只有原作者可以私钥来进行加密
  • 证明没有篡改,中途篡改校验和就不再匹配
    校验和使用摘要算法生成,比如 MD5,SHA

TLS

TLS就是从SSL发展而来的,只是SSL发展到3.0版本后改成了TLS。TLS主要提供三个基本服务:

  • 加密
  • 身份验证,也可以叫证书验证
  • 消息完整性校验
    screenshot-20210707-215255
    TLS协议是基于TCP协议之上的,图中第一个蓝色往返是TCP的握手过程,之后两次橙色的往返,我们可以叫做TLS的握手。握手过程如下:
  1. Client1:TLS版本号+所支持加密套件列表+希望使用的TLS选项
  2. Server1:选择一个客户端的加密套件+自己的公钥+自己的证书+希望使用的TLS选项+(要求客户端证书);
  3. Client2:(自己的证书)+使用服务器公钥和协商的加密套件加密一个对称秘钥(自己生成的一个随机值);
  4. Server2:使用私钥解密出对称秘钥(随机值)后,发送加密的Finish消息,表明完成握手

screenshot-20210707-223951

  • 先看蓝色的部分,可以看出来,这是tcp链接。所以https的加密层也是在tcp之上的。
  • 客户端首先发起clientHello消息。包含一个客户端随机生成的random1 数字,客户端支持的加密算法,以及SSL信息。
  • 服务器收到客户端的clientHello消息以后,取出客户端法发来的random1数字,并且取出客户端发来的支持的加密算法,
  • 然后选出一个加密算法,并生成一个随机数random2,发送给客户端serverhello
  • 让客户端对服务器进行身份校验,服务端通过将自己的公钥通过数字证书的方式发送给客户端
  • 客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key。并将PreMaster Key发送到服务端,服务端通过私钥将PreMaster Key解密获取到Random3,此时客户端和服务器都持有三个随机数Random1 Random2 Random3,双方在通过这三个随即书生成一个对称加密的密钥.双方根据这三个随即数经过相同的算法生成一个密钥,而以后应用层传输的数据都使用这套密钥进行加密.
  • Change Cipher Spec:告诉客户端以后的通讯都使用这一套密钥来进行.

常见加密算法

  • 非对称加密算法(公钥加密)
    有RSA、DSA/DSS、Elgamal、Rabin、D-H、ECC等。在客户端与服务器相互验证的过程中用的就是非对称加密算法。RSA密码体制就是公钥密码体制,RSA的一对公钥和私钥都可以用来加密和解密。比如公钥加密后只能由私钥解密;私钥加密后只能由公钥解密。且一方加密的内容只能由对方进行解密。

  • 对称加密算法(私钥加密)
    有AES、DES、3DES、TDEA、Blowfish、RC4、RC5、IDEA等。加密使用的密钥和解密使用的密钥是同一个密钥。由于加密算法是公开的,若要保证安全性,密钥不能对外公开。通常用来加密消息体。

References:
https://juejin.cn/post/6844903522333376525
https://blog.csdn.net/xiaoming100001/article/details/81109617
https://segmentfault.com/a/1190000019976390
https://www.jianshu.com/p/918d9f517749
https://zhuanlan.zhihu.com/p/34732244
https://juejin.cn/post/6844903545272041479
https://zhuanlan.zhihu.com/p/43789231

Subscribe to 隅

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe