gmfe / Think

观麦前端团队的官方博客
68 stars 3 forks source link

https原理简介和charles原理 #45

Open heyong-2015 opened 6 years ago

heyong-2015 commented 6 years ago

HTTP 简介

https由两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

image

  1. 客户端发起https请求

用户在浏览器输入https网址,然后连接到server的443端口。(http端口是80),发送client报文,请求建立ssl链接。主要内容包含:

采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。主要区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。确定使用ssl协议版本,使用加密算法,并产生一个随机数R2。

  1. 服务器返回server报文。
  1. 客户端解析证书

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从证书中取出服务器的公钥,并生成一个随机数R3。用公钥加密,防止被窃听。并通过之前交换的数据生成一个 Hash 值。

  1. 客户端回应,传送加密信息

上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。至于为什么一定要用三个随机数,来生成"会话密钥":

不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。

pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来 ,那么仅适用pre master secret作为密钥就不合适了,因此必须引入 新的随机因素,那么客户端和服务器加上pre master secret 三个随机 数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。

  1. 服务段解密信息

服务端用私钥解密后,得到了客户端传过来的随机值,服务器收到客户端的第三个随机数之后,计算生成本次会话所用的"会话密钥"

  1. 服务器的最后回应

客户端使用会话密钥解密数据,完成一次和服务端的数据交换

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容

Charles抓取Https原理

Charles本身就是一个协议代理工具,在上篇的Https原理上,客户端和服务器的所有通信都被Charles捕获到。

image

  1. Charles捕获Client发送给Server请求,并伪装成客户端向服务器发起握手请求
  2. 服务器响应,Charles获取到服务器的CA证书,并用根证书公钥进行解密,获取到服务器的CA证书公钥。然后Charles伪造自己的CA证书,伪装为服务器的CA证书发送给客户端
  3. 客户端收到返回之后,和上面讲到的过程一样,证书校验、生成密码、并使用Charles伪装的证书公钥进行加密,并生成 Https通信的协商密码。
  4. Charles捕获到Client发来的重要信息,并使用自己伪造的证书私钥将密文解密,获取到enc_key.然后Charles使用服务器之前返回的证书公钥对明文进行加密并发送给服务器
  5. 服务器收到消息之后,用私钥解开并建立信任,然后发送加密的握手信息。
  6. Charles截获服务器发来的握手密文,并用对称密钥解开,再用自己伪造证书的私钥加密传给客户端。
  7. 客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了”信任“。

在整个通信过程中Charles充当第三者,所有信息对其来讲都是透明的。其次就是根证书,这是https一个信任链的开始。这也是Charles伪造的CA证书能获得双方信任的关键。

heyong-2015 commented 6 years ago

以上内容供大家参考,如果内容有误欢迎更正。

Pines-Cheng commented 6 years ago

可以参考一下这个:中文技术文档的写作规范