首页 > 技术文章 > HTTPS加密过程

JCpeng 2021-08-02 22:15 原文

参考:HTTPS的加密流程|一篇文章读懂HTTPS及其背后的加密原理|HTTPS协议详解|Https加密过程|Https握手过程

一、HTTPS与HTTP的区别

HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

HTTP协议通信:传统的HTTP报文是直接将报文信息以明文形式传输到TCP然后TCP再通过TCP套接字发送给目的主机上。

HTTPS协议通信:HTTPS是HTTP报文直接将报文信息传输给SSL/TSL套接字进行加密,SSL/TSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL/TSL套接字,SSL/TSL解密后交给对应进程(对称加密算法加密数据+非对称加密算法交换密钥+数字证书验证身份)。

(1)对称加密:代表算法有DES,3DES,AES,IDEA等,主要特点是加解密速度快(使用相同秘钥),缺点是安全性较低;常用于报文数据部分加密

  encrypt(明文,秘钥) = 密文
  decrypt(密文,秘钥) = 明文

(2)非对称加密:代表算法有RSA,DSA,ECC,DH等,主要特点秘钥破解难度大(双方使用不同秘钥),安全性高,缺点是算法复杂,加密速度快;常用于对称加密算法秘钥的加密

  encrypt(明文,公钥) = 密文
  decrypt(密文,私钥) = 明文

注:SSL技术最早由浏览器开发商网景通信公司率先倡导的,开发过SSL3.0之后的版本。目前主导权已转移到IETF(Internet Engineering Task Force,Internet工程任务组)的手中。IETF以SSL3.0为基准,后又制订了TLS1.0、TLS1.1和TLS1.2。TSL是以SSL为原型开发的协议,有时会统一称该协议为SSL。当前主流版本是SSL 3.0和TLS 1.0。

二、HTTPS加密过程

(1)首先,客户端发起握手请求,以明文传输请求信息,包含版本信息,加密-套件候选列表,压缩算法候选列表,随机数,扩展字段等信息(这个没什么好说的,就是用户在浏览器里输入一个HTTPS网址,然后连接到服务端的443端口)。

(2)服务端的配置,采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司CA申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。如果对公钥不太理解,可以想象成一把钥匙和一个锁头,只是世界上只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

(3)服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法 compression method、随机数 random_S 以及证书。(这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等)。

(4)客户端验证证书的合法性,包括可信性,是否吊销,过期时间和域名。(这部分工作是由客户端的SSL/TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警示框,提示证书存在的问题。如果证书没有问题,那么就生成一个随机值。然后用证书(也就是公钥)对这个随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容)。

(5)客户端使用公匙对对称密匙加密,发送给服务端。(这部分传送的是用证书加密后的随机值,目的是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了)。

(6)服务器用私钥解密,拿到对称加密的密匙。(服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该随机值进行对称加密,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全)。

(7)传输加密后的信息,这部分信息就是服务端用私钥加密后的信息,可以在客户端用随机值解密还原。

(8)客户端解密信息,客户端用之前生产的私钥解密服务端传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

三、SSL握手过程

由于非对称加密算法复杂度和计算量大,对称加密效率高,SSL就将这两种加密算法混合着用,这样安全和效率就都能保证了。其中具体的过程如下:

(1)客户端A给出 支持的SSL版本+一个随机数+自己支持的加密方式;

(2)服务端B接收到这些信息后确认加密方式+自己的安全证书+一个随机数发给A;

(3)客户端A确认数字证书有效性(验证方法上面已经说明),然后生成一个随机数,并将这个随机数用B的数字证书公钥加密后发送给A;

(4)服务端B使用自己的私钥解密这个随机数;

(5)A和B通过第二步确定的加密方法将前三个随机数生成一个对话密钥(对称加密秘钥)用来接下来的通信(个人感觉不需要三个随机数,只用最后一个就够了,这样做可能是为了更安全),于是A和B救恩那个用对称加密的方式快速有效安全的通信了。

 

推荐阅读