Https原理浅析

使用RSA算法的SSL握手图如下:

《Https原理浅析》

步骤如下
  1. Client端请求https连接,发送client_random和支持的加密方式

  2. 返回证书和server_random(经过Server端私钥加密)

  3. 验证证书,使用证书中公钥加密permaster_secret(permaster_secret是一个随机数)

  4. Client端发送permaster_sercret至Server端,server端通过私钥解密

  5. Client端和Server端分别根据client_random、server_random和permaster_secret生成master secret

要点1: 第二步中Server端为何传证书,不直接传公钥

防止攻击者拦截Client端请求,伪装成服务端。即防止出现如下情况:

《Https原理浅析》

因为私钥和公钥谁都能生成,因而Client端无法确认公钥是否属于Server端。数字证书则可以解决这个问题。

要点2:数字证书

证书包含的主要内容:

  • 证书信息:发布机构、过期时间和序列号

  • 所有者信息

  • 所有者公钥

数字证书由CA(certificate authority)颁发,其作用是保证数字证书里的公钥确实是这个证书的所有者。但数字证书同样是可以伪造的,如何保证这一点呢?这时就需要引入数字签名。

要点3:数字签名

数字签名介绍

客户端验证CA签名过程如下:

《Https原理浅析》

这个过程的第二步,CA的公钥从何而来呢?答案是从操作系统中来。CA的数量并不多,因而可以内置在操作系统中。事实上操作系统中存储的是CA的根证书,根证书中会有CA的公钥,以https协议通信时,Server端会发送证书链给Client端。即CA也分层级,下一级CA的真实性由上一级CA来保证(使用上一级CA的私钥签名)。而根CA的真实性由谁保证?答案显然是操作系统。Windows发行版会内置世界上几个大的根证书机构的证书,即使用正版windows,理论上就已经获得了可信的根证书。

此时Client端、Server端、CA之间的关系如下:

《Https原理浅析》

Client信任CA,CA信任Server(不然就不颁发证书了),使得Client信任Server,此时信任链形成。

最后还有一个问题,如果黑客只是想捣乱,把每次Client端发来的数据修改一遍再转发给Server端,或是把Server端发来的数据修改一遍再回给Client端,该如何处理?
解决的方法跟数字签名很像,即对发送的信息内容做hash得到hash值,然后将信息内容和hash值一起加密发送。对端在解密后,对收到的信息内容以同样的hash算法做hash计算,如果得到的hash值相同,则数据未被修改。

    原文作者:HTTPS
    原文地址: https://segmentfault.com/a/1190000009626031
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞