关于为什么使用
HTTPS
,为什么选用对称加密和非对称加密混合方式,网上有很多,可以参考如下两篇文章:
1.HTTPS 原理详解
2.一个故事讲完https
HTTPS的步骤
- 浏览器发起请求
https://www.jianshu.com
- 服务器发送一个SSL证书给浏览器,SSL 证书中包含的具体内容有,SSL证书的公钥使用非对称加密算法:
(1)证书的发布机构CA
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名 - 浏览器验证证书是否有效
验证步骤有:
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了
(8)如果没有验证通过,浏览器就会报错,而用户选择了“了解风险,继续操作”,浏览器依然会取出公钥往下进行。 - 浏览器随机选择一个对称加密算法和秘钥,用第2步证书中的公钥加密,传输给服务器
- 服务器收到后,用非对称加密算法的私钥解密(只有私钥能解密),获得后续传输使用的对称加密算法和秘钥
- 浏览器和服务器使用该对称加密算法和秘钥加密后的内容进行传输。
使用Fiddler等代理的时候,是如何能拦截https请求的
- fiddler拦截https请求,替换SSL证书中的公钥,改为自己的公钥(因为用公钥加密的内容只有私钥才能解密,所以fiddler要替换为自己的公钥),因为修改了SSL证书的内容,fiddler并用自己的私有CA私钥对内容进行了重签名,导致浏览器验证签名无效,故需要安装fiddler的根证书使浏览器信任该CA。
- 浏览器拿到的SSL证书中的公钥(其实为fiddler的公钥,并不是服务器的公钥),进行上述第4步操作
- fiddler拦截上述第4步操作,替换其中内容,使用真正的服务器公钥加密和服务器通信,此后的所有通信中,fiddler先对服务器内容解密,然后在用浏览器的对称算法和公钥加密传输给浏览器。达到拦截解析https的目的。
网友评论