HTTP的握手

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

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

  • 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验。
  • 浏览器开始查找操作系统中已内置的受信任的证书发布机构 CA,与服务器发来的证书中的颁发者 CA 比对,用于校验证书是否为合法机构颁发。
  • 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。如果找到,那么浏览器就会从操作系统中取出颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行解密。
  • 浏览器使用相同的 Hash 算法根据证书内容计算出信息摘要,将这个计算的值与证书解密的值做对比。
  • 对比结果一致,则证明服务器发来的证书合法,没有被冒充。此时浏览器就可以读取证书中的公钥,用于后续加密了。

b94cf07dde7567f0d4063d24d706f150.png


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!