https协议就是http+ssl协议。
一个完整的https包涵以下连接过程:
1、客户端发送https请求。
2、服务端接收到https请求之后,生成公钥和私钥。
3、服务端返回公钥。
4、客服端收到公钥,会验证公钥是否有效,如颁发机构或过期时间等,如果发现异常会抛出异常,提示证书存在问题。如果没有问题,会生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密。
5、加密之后,发给服务端。
6、服务端收到经过加密的密钥,然后用私钥进行解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行堆成加密,这样除非知道密钥,否则无法知道传输的内容。
7、服务端将经过加密的内容传给客户端。
8、客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。
中间人劫持攻击:
中间人截取客户端发送给服务器的请求,伪装成客户端与服务器进行通信,并将服务器发给客户端的信息的内容发送给客户端,伪装成服务器与客户端进行通信。此时中间人可以获取客户端与服务端的所有通信内容。使用中间人攻击,必须要让客户端信任中间人的证书。
劫持思路:伪造证书
中间人攻击的预防:
证书校验,针对安全性比较高的app,可以采用客户端预埋证书的方式锁死证书,只有当客户端证书与服务端证书完全一致的情况下才允许通信。证书过期必须强制更新。