本文假定读者已经知道什么是公钥、什么是私钥、什么是哈希值。

SSL证书的来源
CA机构有一对配套的公钥和私钥,这个私钥被相当安全的保存在一个神秘的地方,没有人可以知道,这个公钥被预装在了每一台电脑、手机中。
网站申请的证书包括:明文的网址、所有者、证书有效期、网站自己的公钥......,然后对这些信息计算哈希值(也叫摘要或者指纹),CA用私钥将这个摘要加密后附在上述明文信息后边,就构成了网站的证书。加密后的摘要就叫签名,当你得到信息后,你可以自己计算摘要并和用公钥解密签名得到的摘要进行对比,这样就能确保你收到的证书是CA颁发给网站的。

注意:这里共有两套公钥私钥对,服务器自己有一对,另一对分别在CA机构和大众的设备上。

证书组成:

---------------
网站域名
所有者
指纹算法
网站公钥
...
指纹(上述信息的hash)
签名(用CA的私钥加密后的指纹)

---------------

验证证书的方法:
根据证书中的指纹计算算法计算指纹,用电脑上存储的CA公钥解密签名得到证书中存的指纹,比较两个结果是否相同。

浏览器收到证书并验证后,双方开始协商对称加密的算法,对称加密使用的密码由浏览器生成,并用网站公钥加密,发给服务器。服务器得到加密后的密码,用自己的私钥解密得到真实的密码。这就保证了即使别人copy了一份服务器的证书,也无法正常通信,因为不知道私钥。

协商好对称加密算法和密码后,随后的通信都用对称加密进行。

那么Fiddler抓包是怎么获取HTTPS加密的数据呢?它装了一个根证书,是怎么发挥作用的呢?
参考了:https://www.jianshu.com/p/da56ec18979c
本质上就是fiddler做代理,并安装了自己的CA根证书。代理的意思是,对客户端来说,他就是服务器,对服务器来说,他就是客户端,它会假冒自己是客户端和服务器通信,当服务器要发给客户端证书时,fiddler根据收到的真证书现场伪造一个假证书,伪造的证书中公钥变成了它自己的公钥,对指纹进行签名的私钥变成了自己的假CA根证书对应的私钥。把这个证书发给客户端,这样客户端验证证书不会发现问题,同时客户端发送的对称加密密码fiddler用自己的私钥也能解密。
fiddler收到后,先解密信息,再用服务器真正的公钥加密,发给服务器。