在学习开发中,我们认识了http,他的特点如下
- 明文传输,不能保证传输过程安全
- 信息泄露
- 内容篡改
相对于http,我们知道https是加密的,特点如下。
- 密文传输,能保证传输过程安全
加密手段
- 签名证书
- 对称加密
- 秘钥交换
通常来说如果是约定了加密,那么加密秘钥应该怎么获取,怎么保证获取的秘钥是安全、准确的,双向传输均加密,那么交互过程中使用的秘钥是什么?
- https请求先检查证书
- 如果不存在证书,需要先获取证书
- 已获得证书,通过加签信息校验证书有效性
- 证书中包含了与服务器交互的秘钥
- 证书是公开的,那么这里的加密方式肯定不会是对称加密(否则秘钥意义)
- 非对称加密,客户端通过公钥加密传递信息给服务端,服务端能解密,那么说的双向加密又是怎么回事?
- 如果要使客户端获取到服务端的加密信息能解密,是不是需要客户端具有解密秘钥?
- 那么又有一种选择,客户端在获取证书后通过证书的公钥交换后面交互需要的加密信息
- 如果约定的是非对称加密,那么至少还需要一对秘钥保证客户端能解密。
- 如果是约定对称加密,那么使用一个秘钥即可保证客户端、服务端交互加解密。
- 我们知道非对称加密的效率、代价是高于对称加密的,那么实际交互的环节使用对称加密应该是一个不错的选择。
- 那么证书就是通过安全的交换秘钥保证后面交互的安全
- 传输过程中秘钥不泄露则传输安全,然而秘钥是通过非对称加密就行加密的,即只有服务端有解密的能力。
- 传输过程中内容不可见(加密),就算内容被中间人篡改,由于中间人没有加密的秘钥,篡改后的内容也不会被服务端正常解密(解密失败即丢弃)