[]图解https演变以及各种加密解密过程,一篇就够看不懂你打我( 二 )


· 最大的问题出现在了第一步公钥传递上面 , 我怎么信任你这把公钥呢?要知道这个地方还是在裸奔啊 , 如果出现了“中间dog”故意使坏 , 破解不了你但是要搞残你 , 将双方发送给对方的公钥篡改 , 冒充成随便一个公钥 , 那么双方用这个假公钥加密对方永远都解密不出来数据 。
· 第二是加密和解密花费时间长、速度慢 , 只适合对少量数据进行加密 。https全过程 = 对称加密 + 非对称加密 + 数字证书
现实世界中 , 解决信任问题一般是“权威机构”或者权威人物背书 , https就是这样 , 操作系统里面一开始就内置了各大数字认证权威机构(Certificate Authority , 缩写为CA)的数字证书 , 作为系统根证书 , macOS可以通过【钥匙串->系统根证书】查看 , 如图:
[]图解https演变以及各种加密解密过程,一篇就够看不懂你打我
文章图片

文章图片

· 服务器发送的证书里(chrome浏览器点击地址栏最左边 , 能看到证书的详细内容) , 数字证书主要包含了以下几个内容:
证书发布机构 , 即哪家CA
证书的有效期
证书的所有者 , 以及相关的证书的域名、公司名等等
公钥
证书签名
· 客户端校验证书的可信性 , 可以简单分为下面几步:
校验证书声明的CA在操作系统的根证书里面
校验证书在有效期内
校验证书的签名 , 这一步能够证明此证书确实是由CA机构颁发的 。
· 其中校验证书签名是关键 , 证书签名是网站申请证书时 , CA机构对一个hash值使用CA私钥对称加密后的字符串 。可以用表达式表达为:
sign = encrypt(hash("证书机构" + "证书有效期" + "证书所有者" + "公钥"))
· 校验签名的步骤:
客户端从系统根证书中取出对应CA的公钥 , 然后对签名解密获取到hash值 。
客户端使用相同的方式拼接证书信息 , 使用相同算法得到hash值 。
比较解密出来的hash值和客户端拼接的hash值是否相同 , 相同则通过 。
这个过程其实完成了这么一件事情 , 客户端看了一眼证书提供的信息 , 然后通过CA公钥解密 , 证明了证书提供的信息是被拥有CA私钥的机构确认过的(证书的签名) , 便相信了证书提供的信息 。
就像现实生活中的票据 , 相信票据中的信息 , 因为有一个独一无二的机构签章(虽然可以伪造 , 但是非对称机密的签章是不可伪造的)
· https的流程图如下:
[]图解https演变以及各种加密解密过程,一篇就够看不懂你打我
文章图片

文章图片

解决的问题:
非对称加密只用来传输密码本 , 实际数据传输用的对称加密 , 解决了非对称加密解密速度慢的问题
CA机构数字证书验证公钥 , 解决公钥传输的信任问题
一步一步的 , 所有的问题都解决了 , 是不是特别的nice!!!
【[]图解https演变以及各种加密解密过程,一篇就够看不懂你打我】需要指出的是 , HTTPS尽管可以保护数据在传输环节的安全 , 但HTTPS不是万能的 , 不能解决所有的安全问题 。HTTPS无法解决跨站脚本XSS攻击、跨站资源冒用CSRF、跨站脚本跟踪XST、SQL注入攻击、病毒攻击 , HTTPS依然无法解决 。解决这些安全问题 , 需要在通信的终端采取措施来保证用户数据安全 。


推荐阅读