New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

图解 HTTPS:Charles 捕获 HTTPS 的原理 #108

Open
youngwind opened this Issue Aug 3, 2017 · 12 comments

Comments

Projects
None yet
9 participants
@youngwind
Owner

youngwind commented Aug 3, 2017

前言

这篇文章我准备了很久,反复修改了很多次,仍不觉得满意,原因是:

  1. 网上虽有很多 HTTPS 相关的资料,但是质量参差不齐,而且有些地方的理解还不一致,我不知道哪个是对的。
  2. 对于 HTTPS,我很难在实践中应用它,因此,也没法从实践中确认我所理解的就是对的。

下面是我参考的资料,基本代表了我学习 HTTPS 的一个思路顺序:

  1. 关于互联网流量劫持分析及可选的解决方案, By xrzs
  2. 密码学笔记, By 阮一峰
  3. 对称加密算法 VS 非对称加密算法, By loveyoung
  4. 密码技术系列 Part 1 - 对称加密, By BigNerdCoding
  5. 如何用通俗易懂的话来解释非对称加密, By ThreatHunter
  6. XOR 加密简介, By 阮一峰
  7. RSA算法原理(一), By 阮一峰
  8. RSA算法原理(二), By 阮一峰
  9. 数字签名是什么?, By 阮一峰
  10. 看完还不懂HTTPS我直播吃翔, By winwill2012 🌟 🌟 🌟
  11. 关于HTTPS,你需要知道的全部, By rushjs
  12. 深入HTTPS系列一(HTTP&HTTPS), By muice
  13. HTTPS为什么安全 &分析 HTTPS 连接建立全过程, By kaitoulee
  14. SSL/TLS协议运行机制的概述, By 阮一峰
  15. 浅谈Charles抓取HTTPS原理, By rushjs
  16. Nodejs创建HTTPS服务器, By 张丹

既然网上的文章已经很多,我就不赘述了。凭自己的理解,我画了几张 HTTPS 的图,以求能加深记忆,最后的例子是解释 Charles 捕获 HTTPS 的原理。

图解

image1

image2

image3

image4

image5

image

image7

误区

我在学习 HTTPS 的时候,发现有几个地方特别容易掉坑里。

  1. 要想学习 HTTPS,首先应该学习基本的密码学知识,要理解对称加密和非对称加密的数学原理和特性,否则当看到密钥、私钥、公钥等等概念的时候很容易混乱。
  2. “公钥加密,私钥解密”,这句话是没错,但只说对了一半。公钥和私钥的区分不是以谁加密、谁解密来区分的,是以谁公开、谁不公开为区分的。另外,公钥和私钥,都可以用来加密和解密,也就是说,同一对钥匙,公钥加密只能私钥解密,私钥加密只能公钥解密。那为什么我们平常不说“私钥加密”呢?因为公钥是公开的呀!人手一份公钥,私钥加密不跟没加密一个样吗?因此,在实践中,基本不用私钥进行加密,私钥的用途一般是签名。
  3. 证书和证书中心。人们常说:“要想进行 HTTPS 通信,就要安装证书”。这句话未免说得太笼统,我觉得,应该刻意地区分开证书和证书中心,下面以 Charles 为例讲讲。
    image

-------------- 完 --------------

@Thinking80s

This comment has been minimized.

Show comment
Hide comment
@Thinking80s

Thinking80s Aug 5, 2017

那Charles 的方式也算作做是一种显示的劫持了。

Thinking80s commented Aug 5, 2017

那Charles 的方式也算作做是一种显示的劫持了。

@youngwind

This comment has been minimized.

Show comment
Hide comment
@youngwind

youngwind Aug 5, 2017

Owner

@Thinking80s 本质就是劫持。不过要强调的是:之所以能劫持,并不是因为 HTTPS 不安全,而是因为操作人主动安装信任了 Charles 根证书中心。

Owner

youngwind commented Aug 5, 2017

@Thinking80s 本质就是劫持。不过要强调的是:之所以能劫持,并不是因为 HTTPS 不安全,而是因为操作人主动安装信任了 Charles 根证书中心。

@wangning0

This comment has been minimized.

Show comment
Hide comment
@wangning0

wangning0 Aug 5, 2017

@Thinking80s https的抓包,是因为你安装了charles的证书,这个时候charles即充当了客户端也充当了服务端

wangning0 commented Aug 5, 2017

@Thinking80s https的抓包,是因为你安装了charles的证书,这个时候charles即充当了客户端也充当了服务端

@angellaugh

This comment has been minimized.

Show comment
Hide comment
@angellaugh

angellaugh Sep 7, 2017

太棒啦,好清晰,解惑啦!

angellaugh commented Sep 7, 2017

太棒啦,好清晰,解惑啦!

@aaawhz

This comment has been minimized.

Show comment
Hide comment
@aaawhz

aaawhz Oct 11, 2017

为什么都是苑一峰的文章, 百度自己就有很大介绍https的东西。

aaawhz commented Oct 11, 2017

为什么都是苑一峰的文章, 百度自己就有很大介绍https的东西。

@silif

This comment has been minimized.

Show comment
Hide comment
@silif

silif May 16, 2018

数字证书那张图的第11步是不是用服务器私钥解密?

silif commented May 16, 2018

数字证书那张图的第11步是不是用服务器私钥解密?

@youngwind

This comment has been minimized.

Show comment
Hide comment
@youngwind

youngwind May 16, 2018

Owner

对,第11步写错了,应为“用服务器私钥解密,得到会话密钥”。感谢指正,已更正。 @silif

Owner

youngwind commented May 16, 2018

对,第11步写错了,应为“用服务器私钥解密,得到会话密钥”。感谢指正,已更正。 @silif

@zhouatie

This comment has been minimized.

Show comment
Hide comment
@zhouatie

zhouatie Jun 12, 2018

“公钥加密,私钥解密”,这句话是没错,但只说对了一半。公钥和私钥的区分不是以谁加密、谁解密来区分的,是以谁公开、谁不公开为区分的。另外,公钥和私钥,都可以用来加密和解密,也就是说,同一对钥匙,公钥加密只能私钥解密,私钥加密只能公钥解密。那为什么我们平常不说“私钥加密”呢?因为公钥是公开的呀!人手一份公钥,私钥加密不跟没加密一个样吗?因此,在实践中,基本不用私钥进行加密,私钥的用途一般是签名。

这段话把我看的有点懵

zhouatie commented Jun 12, 2018

“公钥加密,私钥解密”,这句话是没错,但只说对了一半。公钥和私钥的区分不是以谁加密、谁解密来区分的,是以谁公开、谁不公开为区分的。另外,公钥和私钥,都可以用来加密和解密,也就是说,同一对钥匙,公钥加密只能私钥解密,私钥加密只能公钥解密。那为什么我们平常不说“私钥加密”呢?因为公钥是公开的呀!人手一份公钥,私钥加密不跟没加密一个样吗?因此,在实践中,基本不用私钥进行加密,私钥的用途一般是签名。

这段话把我看的有点懵

@Vevlins

This comment has been minimized.

Show comment
Hide comment
@Vevlins

Vevlins Aug 19, 2018

非常清晰,感谢分享!
start持续关注

Vevlins commented Aug 19, 2018

非常清晰,感谢分享!
start持续关注

@maquannene

This comment has been minimized.

Show comment
Hide comment
@maquannene

maquannene Aug 30, 2018

对,第11步写错了,应为“用服务器私钥解密,得到会话密钥”。感谢指正,已更正。

图中红字更正的还是:得到会话私钥。
是不是应该是:得到会话秘钥。

maquannene commented Aug 30, 2018

对,第11步写错了,应为“用服务器私钥解密,得到会话密钥”。感谢指正,已更正。

图中红字更正的还是:得到会话私钥。
是不是应该是:得到会话秘钥。

@youngwind

This comment has been minimized.

Show comment
Hide comment
@youngwind

youngwind Aug 31, 2018

Owner

@maquannene 你说得对,图更新错了,现在已经重新更新了。看得好仔细,感谢指正。

Owner

youngwind commented Aug 31, 2018

@maquannene 你说得对,图更新错了,现在已经重新更新了。看得好仔细,感谢指正。

@maquannene

This comment has been minimized.

Show comment
Hide comment
@maquannene

maquannene Aug 31, 2018

@youngwind 传播知识,心存敬畏。

maquannene commented Aug 31, 2018

@youngwind 传播知识,心存敬畏。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment