Https原理浅析

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

图片描述

步骤以下
  1. Client端请求https链接,发送client_random和支持的加密方式算法

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

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

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

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


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

防止攻击者拦截Client端请求,假装成服务端。即防止出现以下状况:操作系统

图片描述

由于私钥和公钥谁都能生成,于是Client端没法确认公钥是否属于Server端。数字证书则能够解决这个问题。server


要点2:数字证书

证书包含的主要内容:htm

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

  • 全部者信息

  • 全部者公钥

数字证书由CA(certificate authority)颁发,其做用是保证数字证书里的公钥确实是这个证书的全部者。但数字证书一样是能够伪造的,如何保证这一点呢?这时就须要引入数字签名。


要点3:数字签名

数字签名介绍

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

图片描述

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

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

图片描述

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


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

相关文章
相关标签/搜索