最近在爬取pornhub视频的时候遇到了一个棘手的问题。就是自己之前从来没有爬过https网站。借此机会好好了解了一下HTTPS原理、SSL、对称加密、非对称加密、证书等原理,从而更进一步了解了Charles配置原理。
首先什么是非对称加密:
- 一个公钥(public key)对应一个私钥(private key)
- 公钥是公开的、私钥只有自己知道
- 如果用其中一个秘钥加密则只有对应的那个秘钥才能解密
- 如果用其中一个秘钥可以解密数据,则该数据必然是由对应的秘钥进行的加密
官方解释:
公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥(其实这里密钥说法不好,就是“钥”),一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
现在假设张三要和李四进行一次秘密通信(当然通信的内容不能让别人知道)
通信的手段就是非对称加密
张三的私钥和公钥分别为zhang_private_key,zhang_public_key
李四的私钥和公钥分别为li_private_key,li_public_key
通信的前提条件是张三和李四要交换自己的公钥
张三发送给李四的信息要用李四的公钥进行加密,也只有李四的私钥才能解密
李四发送给张三的信息同样的道理也是只有张三的私钥才能解密
因为私钥是不外传的从而保证的两个人交流的安全性
但是怎么才能保证张三手里的公钥就是李四的而不是被某个中间人截取而发来的中间人自己的公钥呢?
交流过程可能会变成这样
张三和李四都有中间人的公钥,而且天真的以为这就是对方的公钥
张三–>使用中间人公钥加密–>中间人–>中间人用自己的私钥解密获取数据–>中间人使用李四的公钥加密–>李四–>获取中间人传过来的不知道真假的数据
这种加密算法应用非常广泛,SSH, HTTPS, TLS,电子证书,电子签名,电子身份证等等。
要证明李四真的是李四,这时候就出现了权威的第三方机构拍着胸脯说:如果李四拿着我给他发的证书就没毛病
那张三怎么肯定他李四的这个证书是权威机构发的而不是对方伪造的呢?
原来这个机构也有一对公钥和私钥,李四的个人信息和公钥信息都用这个第三方机构的私钥加密了,张三拿着第三方机构的公钥(也就是根证书)能够解密就说明李四的证书不是伪造的
借鉴了如下文章:
白话解释 对称加密算法 VS 非对称加密算法
白话解释 电子签名,电子证书,根证书,HTTPS,PKI 到底是什么
白话解释 OSI模型,TLS/SSL 及 HTTPS
Charles连接Mac或者手机都要下载证书、信任证书
Charles如果要抓取HTTPS请求要设置ssl proxy settings