http和https协议的区别
我是这样理解HTTP和HTTPS区别的 - Jesse131 - 博客园
http数据是直接通过tcp发送的, 一切数据都是明文的,不能保证数据的有效性和完整性(比如代理就能进行劫持、篡改、窃听、伪造等)。
https数据是先发送到ssl层进行加密再由ssl层通过tcp发送的, 能确保数据的安全性,但是效率会比http差一点(加密那些本身需要使用资源)。
https演化过程 :
一、对称加密
流程:服务的生成密钥, 客户端请求的时候返回给客户端,后面一直用这个密钥加解密。
缺点 : 服务端密钥容易泄露,且如果是多个人,可能需要保存多个密钥。
二、非对称加密
流程:
- 服务端生成一个公私钥对
- 客户端向服务端请求公钥,服务的返回公钥
- 客户端使用返回的公钥对数据进行加密,服务端使用私钥对数据进行解密
- 服务的使用私钥对返回的数据进行加密,客户端使用公钥对返回的数据进行解密
缺点 : 性能太低
三、对称加密+非对称加密
流程:
- 服务端生成公私钥
- 客户端想服务端请求公钥,服务的返回公钥
- 客户端用公钥对自己生成的randkey进行加密,发送给服务端,服务端进行解密得到randkey(非对称加密)
- 客户端和服务端都使用randkey对数据进行加解密(对称加密)
缺点:客户端在请求公钥的时候,可能拿到的是中间人的公钥,中间人再获取服务端的公钥,这样客户端发消息的时候中间人进行解密,然后再用自己拿到的服务端的公钥进行加密发送给服务端。
四、使用CA证书避免中间人身份伪造攻击
流程:
- 服务端将颁发公钥和私钥的工作交给权威的CA机构,证书上有签名、发布机构、有效时间、签名算法、所有者七七八八的。
- 客户端提前拿到CA机构的根证书,自己永远保存,用来验证公钥的合法性。
- 客户端在请求的时候, 公钥的时候, 可以通过跟证书校验公钥的有效性以及所有者等。 中间人如果返回假的公钥,则校验不通过, 如果返回他自己生成的CA证书的公钥, 则返回的信息跟请求的信息不匹配, 也会被校验出来。