HTTPS握手和数据传输过程

  1. 客户端发起一个加密网络(https)请求
  2. 服务端收到请求后使用CA证书产生公钥私钥密钥对,将包含公钥的证书发送给客户端
  3. 客户端开始验证证书的合法性,证书包含了发放日期、到期时间、颁发机构等信息,利用证书上的数字水印验证是否合法,如果不合法,会提出警告信息,如果证书合法,说明是可信赖的机构生产的
  4. 客户端产生一个随机key,使用公钥将其加密,发送给服务器,服务器使用私钥将其解密,存在服务端,此时客户端和服务器都拥有了一个没有被劫持的安全key
  5. 此后客户端和服务器的数据传输都使用此key加密,接收到数据之后使用本地存放在key解密(对称加密解密过程)

HTTPS和TCP之间会有一个SSL层,以上所有过程都在SSL层中完成,比正常的http传输多了SSL握手过程和加密解密过程,会有一定的性能损耗。

HTTPS握手和数据传输过程_第1张图片

  1. 客户端使用https的url访问web服务器,要求与服务器建立ssl连接
  2. web服务器收到客户端请求后, 会将网站的证书(包含公钥)传送一份给客户端
  3. 客户端收到网站证书后会检查证书的颁发机构以及过期时间, 如果没有问题就随机产生一个秘钥
  4. 客户端利用公钥将会话秘钥加密, 并传送给服务端, 服务端利用自己的私钥解密出会话秘钥
  5. 之后服务器与客户端使用秘钥加密传输

HTTPS 握手过程中,客户端如何验证证书的合法性 ?

(1)首先浏览器读取证书中的证书所有者、有效期等信息进行校验,校验证书的网站域名是否与证书颁发的域名一致,校验证书是否在有效期内
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出颁发者CA 的公钥(多数浏览器开发商发布
版本时,会事先在内部植入常用认证机关的公开密钥),然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充

你可能感兴趣的