https

首先我们说下使用HTTPS的作用,主要有三个:

1、验证服务器或客户端的身份合法
2、报文加密
3、验证数据完整性


采用HTTPS可以有效抵御中间人攻击、报文监听攻击和报文篡改攻击。不过,针对报文监听这种攻击的抵御不是绝对的,HTTPS是基于TLS的HTTP,可以将HTTP请求的URL path、request header、request body等内容加密,由于转发需要提供IP及端口信息,所以监听者还是能够监听到目的IP(甚至域名)、目的端口、源IP、源端口、报文大小、通信时间等信息的。

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。

HTTPS在传输的过程中会涉及到三个密钥:

1、服务器端的公钥和私钥,用来进行非对称加密

2、客户端生成的随机密钥,用来进行对称加密

 

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为7步。

1、客户端向服务器发起HTTPS请求,携带客户端SSL/TLS信息,服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,将公钥下发到客户端。

2、客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现公钥有问题,那么HTTPS传输就无法继续。公钥的验证:在设备中存储了全球公认的知名CA的公钥。当客户端接收到服务器的数字证书的时候,会通过系统中内置的CA公钥进行解密,如果解密成功说明公钥是有效的,否则就是不受信任的证书。

3、如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

4、客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

5、服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

6、然后服务器将加密后的密文发送给客户端。

7、客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
————————————————
版权声明:本文为CSDN博主「Dawn_gsn」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gsn1125227/java/article/details/98594039

 

 

 

个人再理解一下:

client--server  第一次https  是验证server是否合法,client内置了全球知名的CA的公钥,通过CA的公钥能解密出server的信息,从而验证了server是合法的,然后也接受认可了本次server分配的临时公钥。进而client将临时生成的对称秘钥通过server的临时公钥加密发给server,server通过临时私钥解出client的对称秘钥。现在完成了client对server身份的验证,接下来是server对client身份进行验证了(就是所谓的用户登录验证)

client使用对称秘钥加密请求登录的页面,server收到请求之后,返回表单给client,client将用户名密码POST给server,server验证通过之后返回登录之后的主页并随机生成一个session对象,session id为token,将token发送给client。

posted @ 2020-04-18 20:50  fangpinz  阅读(438)  评论(0编辑  收藏  举报