Open heyong-2015 opened 6 years ago
https由两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
用户在浏览器输入https网址,然后连接到server的443端口。(http端口是80),发送client报文,请求建立ssl链接。主要内容包含:
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。主要区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。确定使用ssl协议版本,使用加密算法,并产生一个随机数R2。
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从证书中取出服务器的公钥,并生成一个随机数R3。用公钥加密,防止被窃听。并通过之前交换的数据生成一个 Hash 值。
上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。至于为什么一定要用三个随机数,来生成"会话密钥":
不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。 对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。 pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来 ,那么仅适用pre master secret作为密钥就不合适了,因此必须引入 新的随机因素,那么客户端和服务器加上pre master secret 三个随机 数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。
不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。
对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。
pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来 ,那么仅适用pre master secret作为密钥就不合适了,因此必须引入 新的随机因素,那么客户端和服务器加上pre master secret 三个随机 数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。
服务端用私钥解密后,得到了客户端传过来的随机值,服务器收到客户端的第三个随机数之后,计算生成本次会话所用的"会话密钥"
客户端使用会话密钥解密数据,完成一次和服务端的数据交换
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容
Charles本身就是一个协议代理工具,在上篇的Https原理上,客户端和服务器的所有通信都被Charles捕获到。
在整个通信过程中Charles充当第三者,所有信息对其来讲都是透明的。其次就是根证书,这是https一个信任链的开始。这也是Charles伪造的CA证书能获得双方信任的关键。
以上内容供大家参考,如果内容有误欢迎更正。
可以参考一下这个:中文技术文档的写作规范
HTTP 简介
https由两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
用户在浏览器输入https网址,然后连接到server的443端口。(http端口是80),发送client报文,请求建立ssl链接。主要内容包含:
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。主要区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。确定使用ssl协议版本,使用加密算法,并产生一个随机数R2。
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从证书中取出服务器的公钥,并生成一个随机数R3。用公钥加密,防止被窃听。并通过之前交换的数据生成一个 Hash 值。
上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。至于为什么一定要用三个随机数,来生成"会话密钥":
服务端用私钥解密后,得到了客户端传过来的随机值,服务器收到客户端的第三个随机数之后,计算生成本次会话所用的"会话密钥"
客户端使用会话密钥解密数据,完成一次和服务端的数据交换
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容
Charles抓取Https原理
Charles本身就是一个协议代理工具,在上篇的Https原理上,客户端和服务器的所有通信都被Charles捕获到。