我们从why 和 how 两个问题开始讲起。
为什么安全保护?
- 你玩了几年的游戏账号被盗了;
- 你在购物网站的订单被人修改了;
- 你的信用卡信息被钩鱼网站盗走了;
以上问题,主要是http三个方面的问题导致的,
- 通信不加密;
- 没有完整性保护;
- 不做身份验证。
如何保证安全?
https 使用了一个叫做 tls的协议,这里只对tls做一个简单的介绍,tls(transport layer secure 传输层安全),有些文章里也称作是ssl(Secure Socket Layer, 安全套接层),
tls是基于ssl开发的一种协议。
tls在通信过程中用到的公开密钥加密(非对称加密)和 共享密钥加密(对称加密)两种方式,关于这两种的方式的区别请查阅其他文章,这里不做介绍。
那么tls如何解决上述3个问题呢?
大概流程是这样:
图片来自阮一峰的博客
- 站长向第三方认证机构申请证书,其中包括公钥和站长信息(企业信息),认证机构核实身份后,用自己的私钥对站长提交的公钥签名,还对站长信息摘要做加密,然后把原公钥、原站长信息和加密码后的公钥与加密的摘要信息绑在一起,发送给站点;
- 当用户向站点请求时,会带上支持的加密套件和一个随机数;
- 当站点收到用户的加密套件,如果站点也支持其中一种加密方式,就把证书(包含了网站地址,加密公钥,证书颁发机构)发送给用户,同时还有一个随机数;
- 用户收到证书后,用浏览器预装的认证机构公钥验证签名,如果通过,便能确认两件事,一,公钥是有效的;二,认证站点公钥的机构,是真实有效的数字认证机构;接着用户再生一个随机数,并用收到的公钥加密;
- 站点收到加密后的随机数,使用站点私钥解密,并用之前约定好的加密方式,对3个随机数加密,这样双方就可以使用共享密钥通信了。
知道了流程,我们再来看上述3个问题,
1 如何保证通信内容不被看到?
answer: 在双方都有了相同的密钥后,一方加密,另一方解密,即使内容被窃取,他也无法对报方主体解密,也就无法使用。
2 如何保证完整性?
answer: 同样如果信息被人窃取,用另一个密钥加密后发送给站点,此时站点会解密失败,因为密钥不一样
3 如何保证用户和站点的真实性?
answer: 验证站点主要在收到证书后,对证书签名验证;而验证用户则靠上述的共享密钥
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。