咱们从 why 和 how 两个问题开始讲起。
为什么须要安全感?
- 你玩了几年的游戏账号被盗了;
- 你在购物网站的订单被人批改了;
- 你的信用卡信息被钩鱼网站盗走了;
以上问题,次要是 http 三个方面问题导致的,
- 通信不加密;
- 没有完整性爱护;
- 不做身份验证;
如何保障平安 ?
http 应用了一个叫做 tls 的协定,这里只对 tls 做一个简的介绍,tls(transform layer secure 传输层平安),有些文章里也称作是 ssl(Secure Socket Layer, 安全套接层),
是基于 ssl 开发的一种协定。
那么 tls 如何解决上述 3 个问题呢?
大略流程是这样:
图片来自阮一峰的博客
- 站长向第三方认证机构申请证书,其中包含公钥和站长信息(企业信息),认证机构核实身份后,用本人的私钥对站长提交的公钥签名,还对站长信息摘要做加密,而后把原公钥、原站长信息和加明码后的公钥绑在一起,发送给站点;
- 当用户向站点申请时,会带上反对的加密套件和一个随机数;
- 当站点收到用户的加密套件,如果站点也反对其中一种加密形式,就把证书发送给用户,同时还有一个随机数;
- 用户收到证书,用浏览器预装的认证机构公钥验证签名,如果通过,便能确认两件事,一,公钥是无效的;二,认证站点公钥的机构,是真实有效的数字认证机构;接着用户再生一个随机数,并用收到的公钥加密,
- 站点收到加密后的随机数,应用站点私钥解密,并用之前约定好的加密形式,对 3 个随机数加密,这样单方就能够应用共享密钥通信了。
晓得了流程,咱们再来看上述 3 个问题,
1 如何保障通信内容不被看到?
answer: 在单方都有了雷同的密钥后,一方加密,另一方解密,即便内容被窃取,他也无奈对报方主体解密,也就无奈应用。
2 如何保障完整性?
answer: 同样如果信息被人窃取,用另一个密钥加密后发送给站点,此时站点会解密失败,因为密钥不一样
3 如何保障用户和站点的真实性?
answer: 验证站点次要在收到证书后,对证书签名验证;而验证用户则靠上述的共享密钥