HTTP和HTTPS
http是一种超文本传输协议,具体来说,主要是来规范浏览器和服务器端的行为的。
http在传输内容上是明文传输的,容易产生安全问题。
所以https来了,它是在http的基础上加上SSL/TLS协议,对通信数据进行加密。
先从下面逐步了解它的工作原理。
对称加密
客户端和服务端都是使用一样的密钥,客户端或者服务端对要发送的数据进行密钥加密,发送给对方,用密钥解密。
优点:简单高效,只要密钥不被第三方获取,是安全的。
缺点:密钥被别人获取从而解密得到数据,不安全。
非对称加密
当客户端要跟服务端通信时,服务端有两把密钥,一把公钥,一把私钥,公钥发送给客户端,私钥由服务端自己保管。客户端用公钥加密数据发送给服务端,服务端用私钥解密得到数据
优点:其他人拿到了客户端用公钥加密发送的数据后,没有服务端的私钥是解不开的。
弊端
两种加密方式的公钥都可能会被中间第三方截取,造成安全问题。
思考
非对称加密只能保证单方的通信安全,如果要保证双方的通信安全,直接客户端和服务端都有自己的一对密钥(公钥和私钥),然后互相发送自己的公钥给对方,然后接收对方用自己的公钥加密的数据时,用自己的私钥解密不就行了?
非对称加解密耗时要远大于对称加解密,对性能有损耗
所以https采用的是 非对称加密 + 对称加密的方案
- 服务端自己有一对密钥,公钥和私钥。
- 服务端将公钥发送给客户端。
- 客户端接收后,自己产生一把对称加密的密钥A1,然后用服务端发给自己的公钥对A1进行加密发送给服务端。
- 服务端用自己的私钥进行解密,得到客户发送过来的密钥A1(这样就确保了对称密钥不会被第三方截取)。
- 双方通信用对称密钥A1进行对称加密通信。
还是有个问题:这样还有安全问题吗
有的
在上述过程的第二步,服务端发送的公钥有可能被别人截取,中间人发送假的公钥(中间人自己的公钥)给客户端,但是客户端完全不知道这不是服务端发过来的,于是傻乎乎的把自己的对称密钥用中间人的公钥进行加密,最后造成数据完全被中间人获取。
数字签名
如何保证第二步中的公钥不被别人窃取呢,数字签名就是解决此问题的,