zoukankan      html  css  js  c++  java
  • 图解https

    前言

    为什么要使用HTTPS?HTTP采用明文传输,存在被监听、内容被篡改、身份被冒充的可能。为了保证安全性,需要对数据进行加密,这便有了HTTPS。

    一步步分析HTTPS

    1、采用哪种加密方式加密数据?

    对称加密 非对称加密
    特点 唯一的密钥 一对公钥和私钥
    优点 加密速度快 公钥公开,私钥保密,只要私钥不泄露就很安全
    缺点 所有人都拿着同一密钥,一旦泄露,所有相关数据全部都暴露 速度慢

    从上表的对比看出,使用非对称密钥显然更安全,但是加密速度慢。当数据量小的时候还好,数据大时显然存在不足。可是对称加密又不安全,怎么办?最好的办法就是结合它们俩——对数据加密采用对称加密,对对称加密的密钥采用非对称加密。

    2.如何传输对称密钥?

    客户端和服务端分别要用对称密钥来加密和解密,那这个对称密钥如何安全的让双方都知道呢?继续用对称密钥显然不行,此时就结合上非对称密钥。

    3.中间人攻击

    从图中看出,即使有中间人替换了真正的公钥,双方也无法得知,也就是说,双方无法确认对方身份。那如果对此公钥也进行加密呢?那这样还是会存在中间人攻击,也就是无法加密多少层,只要最外层的公钥需要传输给对方知道,最外层就有可能发生中间人攻击。这时候我们需要一个可以不需要传输公钥且又很安全的加密方法,此时就需要引入数字证书了(当然,数字证书的作用不仅仅只是不需要传公钥)。

    4.数字证书

    这里说明下,权威机构CA的公钥不需要传输,因为权威机构CA会和主流的操作系统合作,将它们的公钥内置在系统中,这样客户端收到数字证书后,从证书中找到权威机构CA的信息,然后根据此信息从本地找到此权威机构CA的公钥进行解密即可。

    为什么要用签名这种方式?
    可以防止以下3种情况:

    • 如果中间人对服务器公钥进行篡改,则客户端在收到后利用CA的公钥进行解密得到摘要,这将服务器信息经过hash后的摘要不同,则可以认为此证书不可信;
    • 如果中间人对公钥进行篡改后,想要制造出假的签名以绕开以上情况,此时中间人无法获得CA的私钥,也就无法对摘要进行加密得到签名;即使强行找一个错的私钥进行加密,客户端收到后无法用CA的公钥进行解密也没用;
    • 如果中间人对整个数字证书进行掉包(将中间人的公钥和域名发给CA,拿到中间人的数字证书),客户端收到时仍然可以利用CA公钥进行解密得到摘要,且对服务器信息(公钥、域名)进行hash得到的摘要一样,但证书中的域名与客户端正在访问的域名不一样,因此仍然认为此证书不可信。

    Charles代理HTTPS

    其实,Charles代理HTTPS的原理就是以上的第二种情况,即中间人Charles对服务器公钥进行篡改,然后利用Charles签证中心的私钥对服务器信息进行加密,传给客户端。不同的是,此时客户端已经信任了Charles签证中心,所以可以通过Charles签证中心的公钥对签名进行解密。因此,Charles能代理HTTPS的主要原因就是:客户端安装证书信任了Charles签证中心

    参考

    图解 HTTPS:Charles 捕获 HTTPS 的原理
    看完还不懂HTTPS我直播吃翔

  • 相关阅读:
    volatile 能使得一个非原子操作变成原子操作吗?
    什么是线程局部变量?
    使用idea插件进行java代码生成
    mybatis plus+dynamic事务导致多数据源切换失败
    10_docker-compose
    Ubuntu的Python从2.x升级到3.x
    idea查看控制台数据mybatis的sql完整语句
    iframe高度处理
    angular路由
    去掉iPhone、iPad的默认按钮、输入框样式
  • 原文地址:https://www.cnblogs.com/youhong/p/9702617.html
Copyright © 2011-2022 走看看