首先来说一下什么是https协议:
https就是http+ssl:
- HTTPS 是一种应用层协议,是一种透过计算机网络进行安全通信的传输协议。
- HTTPS 经由 HTTP 进行通信,但是在 HTTP 的基础上引入了一个加密层,使用 SSL/TLS 来加密数据包
- HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
- HTTPS 默认工作在 TCP 协议443端口
什么是Https中间人攻击:
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)
ssl中间人攻击,顾名思义,就是在SSL回话中,作为客户端和服务器端中间的代理,进行数据的侦听和转发,从而实现在不被客户端发觉的情况下,获取回话内容的一种攻击方式。要实现ssl中间人攻击,需要实现两个目标:作为中间人;解密SSL数据。
- 正常情况下是,客户端和服务器直接对话模式:客户端——服务器;
- 实施ssl中间人攻击后的对话模式:客户端——中间人——服务器。
中间人攻击过程如下:
- 服务器向客户端发送公钥。
- 攻击者截获公钥,保留在自己手上。
- 然后攻击者自己生成一个【伪造的】公钥,发给客户端。
- 客户端收到伪造的公钥后,生成加密hash值发给服务器。
- 攻击者获得加密hash值,用自己的私钥解密获得真秘钥。
- 同时生成假的加密hash值,发给服务器。
- 服务器用私钥解密获得假秘钥。
- 服务器用加秘钥加密传输信息
1.https请求
客户端向服务端发送https请求;
2.生成公钥和私钥
服务端收到请求之后,生成公钥和私钥。公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容;
3.返回公钥
服务端将公钥(证书)返回给客户端,公钥里面包含有很多信息,比如证书的颁发机构、过期时间等等;
4.客户端验证公钥
客户端收到公钥之后,首先会验证其是否有效,如颁发机构或者过期时间等,如果发现有问题就会抛出异常,提示证书存在问题。如果没有问题,那么就生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密;
5.发送客户端密钥
客户端用服务端的公钥加密密钥,然后发送给服务端。
6.服务端收取密钥,对称加密内容
服务端收到经过加密的密钥,然后用私钥将其解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行对称加密,这样除非知道密钥,否则无法知道传输的内容。
7.加密传输
服务端将经过加密的内容传输给客户端。
8.获取加密内容,解密
客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。