为什么要使用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://github.com/youngwind/blog/issues/108
https://blog.csdn.net/winwill2012/article/details/71774469

一步步弄懂HTTPS的更多相关文章

  1. 彻底弄懂 JavaScript 执行机制

    本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定 ...

  2. Golang, 以 9 个简短代码片段,弄懂 defer 的使用特点

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  3. 一文看懂https如何保证数据传输的安全性的【转载、收藏】

    一文看懂https如何保证数据传输的安全性的   一文看懂https如何保证数据传输的安全性的 大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明 ...

  4. 【TensorFlow】一文弄懂CNN中的padding参数

    在深度学习的图像识别领域中,我们经常使用卷积神经网络CNN来对图像进行特征提取,当我们使用TensorFlow搭建自己的CNN时,一般会使用TensorFlow中的卷积函数和池化函数来对图像进行卷积和 ...

  5. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法——BackPropagation   最近在看深度学习 ...

  6. [转]js模块化编程之彻底弄懂CommonJS和AMD/CMD!

    原文: https://www.cnblogs.com/chenguangliang/p/5856701.html ------------------------------------------ ...

  7. 【转】彻底弄懂Java中的equals()方法以及与"=="的区别

    彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...

  8. 这一次,彻底弄懂 JavaScript 执行机制

    本文转自https://juejin.im/post/59e85eebf265da430d571f89#heading-4 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还 ...

  9. [转帖]彻底弄懂UTF-8、Unicode、宽字符、locale

    彻底弄懂UTF-8.Unicode.宽字符.locale linux后端开发   已关注   彻底弄懂UTF-.Unicode.宽字符.locale unicode 是字符集 utf-8是编码格式.. ...

随机推荐

  1. Postgres 的 JSON / JSONB 类型

    从 MySQL 5.7.8 开始,MySQL 支持原生的 JSON 数据类型. 一.介绍 json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等.而jsonb是解析输入后 ...

  2. MyBatis全局配置文件标签详解

    一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...

  3. python3.6使用f-string来格式化字符串

    这里的f-string指的是以f或F修饰的字符串,在字符串中使用{}来替换变量,表达式和支持各种格式的输出.详细的格式化定义可以看官方文档 >>> a, b = 30, 20 > ...

  4. 德哥PostgreSQL学习资料汇总(转)

    文章来自:https://yq.aliyun.com/articles/59251?spm=5176.100239.bloglist.95.5S5P9S 德哥博客新地址:https://billtia ...

  5. nginx在centos 7中源码编译安装【添加grpc的支持】

    安装依赖软件 1.安装编译工具gcc gcc是一个开源编译器集合,用于处理各种各样的语言:C.C++.Java.Ada等,在linux世界中是最通用的编译器,支持大量处理器:x86.AMD64.Pow ...

  6. tensorflow学习总结之reduce_sum函数

    tensorflow里面集成了许多基于统计的数学函数,类似于reduce_sum,reduce_mean,reduce_min,reduce_max,等,根据字面意思分别是求和,求平均,求最大,求最小 ...

  7. netty客户端源码

    随笔记录. //创建一个ChannelFactory(客户端代码) ChannelFactory factory = new NioClientSocketChannelFactory( Execut ...

  8. StreamSets学习系列之StreamSets的Create New Pipeline(图文详解)

    不多说,直接上干货! 前期博客 StreamSets学习系列之StreamSets支持多种安装方式[Core Tarball.Cloudera Parcel .Full Tarball .Full R ...

  9. python使用requests请求的数据乱码

    1.首先进入目标网站,浏览器查看源码,找到head标签下面的meta标签,一般meta标签不止一个,我们只需找到charset属性里面的值即可 2.requests请求成功时,设置它的编码,代码如下 ...

  10. PHP多进程系列笔记(三)

    本节讲解几个多进程的实例. 多进程实例 Master-Worker结构 下面例子实现了简单的多进程管理: 支持设置最大子进程数 Master-Worker结构:Worker挂掉,Master进程会重新 ...