Https
Http为什么不安全
http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改。
中间人攻击
在http通信过程中,“中间人”将广告链接嵌入到服务器发给用户的http报文里,导致用户界面出现很多不良链接; 或者是修改用户的请求头URL,导致用户的请求被劫持到另外一个网站,用户的请求永远到不了真正的服务器。
https如何保证安全
1、服务器和客户端传输的数据是加密的。
2、在交换数据之前,验证一下对方的合法身份。
https原理
但这还是会遇到中间人攻击,中间人会伪装成“假冒客服端”和服务器通信,也可以伪装成“假冒服务器端”和客服端通信,导致传输过程中内容泄密。
为了解决这个问题,引入数字证书。
加入数字证书后的流程
服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是服务器给客户端的。
中间人发送的伪造证书,不能够获得CA的认证,此时,客户端和服务器就知道通信被劫持了。
数字证书的作用
1、身份授权:确保浏览器访问的网站是经过CA验证的可信任的网站。
2、分发公钥:每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥),在SSL握手时会通过certificate消息传输给客户端。
3、验证证书合法性:客户端接收到数字证书后,会对证书合法性进行验证,只有验证通过后的证书,才能够进行后续通信过程。
双向认证
1、先决条件是有两个或两个以上的证书,一个是服务端证书,另一个或多个是客户端证书。
2、服务端保存着客户端的证书并信任该证书,客户端保存着服务端的证书并信任该证书。这样,在证书验证成功的情况下即可完成请求响应。
3、双向认证一般企业应用对接。
单向认证
1、客户端保存着服务端的证书并信任该证书即可
2、https一般是单向认证,这样可以让绝大部分人都可以访问你的站点。
Charles抓取https数据的原理
客户端向服务器发起HTTPS请求
Charles拦截客户端的请求,伪装成客户端向服务器进行请求
服务器向“客户端”(实际上是Charles)返回服务器的CA证书
Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(Charles拿到了服务器证书的公钥)
客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(实际上是Charles)
Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
服务器用自己的私钥解密对称密钥,向“客户端”(实际上是Charles)发送响应
Charles拦截服务器的响应,替换成自己的证书后发送给客户端
至此,连接建立,Charles拿到了服务器证书的公钥和客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
如何防止Charles抓取https数据
1、当网络请求的时候,客户端判断当前环境是否设置了代理,如果设置代理,不允许进行访问。
2、客户端本地做证书校验,并且设置不仅仅校验公钥,设置完整的正式校验模式
3、客户端不要轻易信任证书。
参考文档:https://www.jianshu.com/p/35f78893aa50
https://www.jianshu.com/p/3941410f7378