7.1HTTPS基础
Http + 加密 + 认证 + 完整性保护 = Https。
传统的Http协议是一种应用层的传输协议,Http直接与TCP协议通信。
其本身存在一些缺点:
- Http协议使用明文传输,容易遭到窃听;
- Http对于通信双方都没有进行身份验证,通信的双方无法确认对方是否是伪装的客户端或者服务端;
- Http对于传输内容的完整性没有确认的办法,往往容易在传输过程中被劫持篡改。
因此,在一些需保证安全性的场景下,比如涉及到银行账户的请求时,Http无法抵御这些攻击。 Https则可通过增加的SSL\TLS,支持对于通信内容的加密,以及对通信双方的身份进行验证。
7.2Https的加密原理
近代密码学中加密的方式主要有2类:
- 1)对称秘钥加密;
- 2)非对称秘钥加密。
对称秘钥加密是指加密与解密过程使用同一把秘钥。这种方式的优点是处理速度快,但是如何安全的从一方将秘钥传递到通信的另一方是一个问题。
非对称秘钥加密是指加密与解密使用2把不同的秘钥。这2把秘钥,一把叫公开秘钥,可随意对外公开。一把叫私有秘钥,只用于本身持有。得到公开秘钥的客户端可使用公开秘钥对传输内容进行加密,而只有私有秘钥持有者本身可对公开秘钥加密的内容进行解密。这种方式克服了秘钥交换的问题,但是相对于对称秘钥加密的方式,处理速度较慢。
SSL\TLS的加密方式则是结合了2种加密方式的优点。首先采用非对称秘钥加密,将一个对称秘钥使用公开秘钥加密后传输到对方。对方使用私有秘钥解密,得到传输的对称秘钥。后双方再使用对称秘钥进行通信。这样即解决了对称秘钥加密的秘钥传输问题,又利用了对称秘钥的高效率来进行通信内容的加密与解密。
安全方面的文章,可详细阅读以下几篇:
- 《即时通讯安全篇(一):正确地理解和使用Android端加密算法》
- 《即时通讯安全篇(二):探讨组合加密算法在IM中的应用》
- 《即时通讯安全篇(三):常用加解密算法与通讯安全讲解》
- 《即时通讯安全篇(四):实例分析Android中密钥硬编码的风险》
- 《即时通讯安全篇(五):对称加密技术在Android平台上的应用实践》
- 《即时通讯安全篇(六):非对称加密技术的原理与应用实践》
- 《传输层安全协议SSL/TLS的Java平台实现简介和Demo演示》
- 《理论联系实际:一套典型的IM通信协议设计详解(含安全层设计)》
- 《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》
7.3Https的认证
SSL\TLS采用的混合加密的方式还是存在一个问题,即怎么样确保用于加密的公开秘钥确实是所期望的服务器所分发的呢?也许在收到公开秘钥时,这个公开秘钥已经被别人篡改了。因此,还需对这个秘钥进行认证的能力,以确保通信的对方是所期望的对象。
目前的做法是使用由数字证书认证机构颁发的公开秘钥证书。服务器的运营人员可向认证机构提出公开秘钥申请。认证机构在审核后,会将公开秘钥与共钥证书绑定。服务器就可将这个共钥证书下发给客户端,客户端在收到证书后,使用认证机构的公开秘钥进行验证。一旦验证成功,即可知道这个秘钥是可信任的秘钥。
7.4Https小结
Https的通信流程:
- 1)Client发起请求;
- 2)Server端响应请求,并在后将证书发送至Client;
- 3)Client使用认证机构的共钥认证证书,并从证书中取出Server端共钥;
- 4)Client使用共钥加密一个随机秘钥,并传到Server;
- 5)Server使用私钥解密出随机秘钥;
- 6)通信双方使用随机秘钥最为对称秘钥进行加密解密。