1、http是明文传输的,被中间人抓包就被看光光了
2、那怎么办?
加个密呗
3、用什么加密?秘钥怎么传输?
直接对称加密,服务端直接发送对称加密秘钥给客户端:传输的秘钥被中间人拦截了,还是被看光光
非对称加密,服务端直接发送非对称加密公钥给客户端:服务器将公钥发给客户端时被中间人拦截了,中间人自己生成公私钥,把自己生成的公钥发给客户端,客户端加密后发送数据被中间人拦截,然后被中间人的私钥解密,还是被看光光。
4、那怎么办?怎么才能不让中间人改服务端传过来的公钥呢?
已知私钥加签后数据不能被修改(不了解的话先去搜下加签解签)
但是服务器的公钥怎么给到客户端呢?直接发送给客户端又被中间人修改了咋办?
既然不能服务器直接发送公钥给客户端,那能不能不发送就有啊?可以啊,装机就自带呗。
也就是说,你的浏览器,我的浏览器,大家的浏览器都自带一个解签的公钥,那加签的私钥放哪里的?约定给一个权威部门呗(CA机构)。
这个时候,服务器生成一对公私钥,将服务端的公钥给权威部门的私钥加签,然后发送给客户端,客户端用自带的公钥解签就可以拿到服务端的公钥了。
这个时候你可能就要问了
a、如果中间人拦截了数据怎么办?拦截了没用啊,中间人最多就是拿大家都有的公钥去解签,获取到服务端的公钥,拿到公钥没啥用啊。
b、那这个时候中间人自己生成一对公私钥行不行?中间人生成的数据客户端解签不了啊。
c、那直接拦截客户端的数据行不行,客户端的数据是服务端的公钥加密过的,中间人也解密不了。
5、以上的操作是让加密安全了,但是非对称加密可是很慢的,那怎么办呢?用对称加密呗
用上面提到的非对称加密传输对称加密的秘钥不就行了嘛,这个时候的对称加密秘钥不就只有客户端和服务端知道了,嘿嘿