对称加密
即加密和解密使用同一个密钥,虽然对称加密破解难度很大,但由于对称加密需要在网络上传输密钥和密文,一旦被黑客截取很容易就能被破解,因此对称加密并不是一个较好的选择。
非对称加密
即加密和解密使用不同的密钥,分别称为公钥和私钥。
举个例子:
客户端需要向服务端(服务端自己有两把成对钥匙,公钥私钥)发送数据
- 服务端先把公钥发给公开网络上
- 客户端使用服务端的公钥加密文件将文件发给服务端
- 服务端用自己的私钥解密。
但是非对称加密消耗的CPU资源非常大,效率很低,严重影响HTTPS的性能和速度。因此非对称加密也不是HTTPS的理想选择。
对称加密和非对称加密结合
吸取了两种的各自的优点,解密快 和安全。也是https的加密方式
举个例子:
服务端先把非对称公钥发给公开网络上
客户端自己生成一对对称加解密钥匙,用非对称公钥加密对称钥匙,再用对称钥匙加密数据,然后发送给服务端
服务端使用非对称私钥解密 对称钥匙,用对称钥匙解密数据
要返回加密数据时,服务端直接用对称钥匙加密数据 然后返回数据给客户端即可
(接下来使用对称加解密)然后客户端可以判断你只要是拥有私钥就是我认可的信源(服务端)
因为双方都有对称钥匙,使用钥匙加解密数据即可(和原始的加解密的区别是不需要将对称钥匙放在公开的网络环境下传输)
这里有个问题,就是假如黑客假装自己是服务器率先将自己伪造的公私钥发给客户端,怎么办?这就涉及到数字证书了。如果是非法的公私钥,断开连接即可。
数字证书和公私钥的关系
如果按照正规的来说,数字证书和公私钥要一一对应。而因为公私钥可以随意生成,那么如果只存在公私钥而没有数字证书的话,那么就算不被公证认可的。算是非法的。你通过该公私钥传递的数据都会被持有人知道。
数字证书的两个作用:
分发公钥。每个数字证书都包含了注册者生成的公钥。在 TLS握手时会通过 certificate 消息传输给客户端。
身份授权。确保客户端访问的网站是经过 CA 验证的可信任的网站。(在自签名证书的情况下可以验证是否是我们自己的服务器)
参见https://blog.csdn.net/u014386474/article/details/51982642
双向认证
参见当Retrofit遇上HTTPS之关于HTTPS的那些事
其中有个客户端内置服务端数字证书了解一哈