HTTPS

来源:互联网 发布:淘宝达人怎么修改昵称 编辑:程序博客网 时间:2024/04/29 18:12

为什么要用Https

   http是明文传输,存在窃听、篡改等风险,而https通过验证服务器正确性、协商通信加密密钥有效的降低了风险;

Https 基本原理

 基本原理:服务端生成密钥,并把公钥传给客户端。 然后协商用对称加密算法,并根据信息各自生成对称密钥。 协商完成后,接下来的数据通过该密钥进行加解密。 数字证书出现是为了保证客户端拿到的公钥,是真证要访问服务器生成的公钥, 而不是别人伪装的公钥,从而保证通信的安全性。 下面将详细分析https通信流程:

Https 通信流程

1. [c ->s]  client hello 消息:主要包含如下内容  <1>支持的协议版本,比如TLS 1.0版。  <2> 一个客户端生成的随机数,稍后用于生成"对话密钥"。  <3> 支持的加密方法,比如RSA公钥加密。  <4> 支持的压缩方法。2. [s ->c] server hello 消息,主要包含如下内容:  <1> 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。  <2> 一个服务器生成的随机数,稍后用于生成"对话密钥"。  <3> 确认使用的加密方法,比如RSA公钥加密。  <4> 服务器证书。  注:其中,<1>,<3>协商确定tls版本及加密方法;  <4>客户端拿到服务器证书后,首先验证证书的合法性,  从而确定服务器的合法情,并从证书中,提取中公钥信息。3. [c ->s] 客户端验证证书没有问题后,    将生成对称加密算法密钥的随机数通过rsa公钥加密后,    发给服务器,该消息主要包含以下内容:  <1> 一个随机数。该随机数用服务器公钥加密,防止被窃听。  <2> 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。  <3> 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。   注:由于rsa的私钥只有服务器持有,所以可以保证只有服务器 可以解密得到随机数,  就算该消息被窃听,因为无法使用正确的私钥解密,也无法获取到随机数,  从而无法生成对称加密的密钥信息,从而保证了通信的安全性。4. [s ->c] 服务器收到客户端的响应后,通过私钥解密获取到第三组随机数,从而可以生成对称加密算法的密钥信息,并发消息通知客户端,接下来的数据都使用该密钥进行加密传输,消息主要包含以下内容:  <1>编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。  <2>服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。  这条消息发完之后,握手阶段都完成。之后就可以开始传送应用数据了。  应用数据在传输之前,首先要附加上MAC secret,然后再对这个数据包使用协商的密钥进行加密。在服务端收到密文之后,使用协商的密钥进行解密,客户端收到服务端的数据之后使用协商的密钥进行进行解密,然后使用各自的write MAC key对数据的完整性包括是否被串改进行验证。