http && https
- https大部分内容和http一样,https可以理解为对http的一层封装。
- https在应用层和传输层之间增加了一层SSL/TLS,用来加密和解密数据,保护用户的信息。即,用户的数据在发送之前由SSL层进行加密处理,发送到目标主机后再由SSL进行解密处理。
- 有得必有失,https更高的安全性所带来的损失就是效率,所以https的效率一定比http要低。
对称加密
- 密钥:某个用来完成加密、解密、完整性验证等密码学应用的秘密信息。
- 公钥:对所有人公开的密钥称为公钥。
- 私钥:保密的、不能让别人知道的密钥。
所谓的对称加密就是服务器和客户端双方都使用同一个密钥。
客户端用该密钥进行加密。服务器用该密钥进行解密。
- 一旦第三方拿到密钥,那么就会对用户造成损失。
- 客户端和服务器要想拥有同一份密钥,需要先将密钥传给对方,那么谁来保护密钥呢?
- 所以,又有了非对称加密。
非对称加密
- 服务器拥有私钥和公钥。私钥一般用来解密,公钥一般用来加密。
- 当有一台客户端连接到服务器,服务器将公钥和加密算法传给客户端,这些是不怕被知道的,因为解密的是私钥,公钥只能用来加密。
- 然后客户端将数据用公钥加密,传给服务器,在这个过程中,即使数据被劫持,对方没有私钥,也无法解密。
但是非对称加密一般比较复杂,浪费时间,所以我们可以采用对称和非对称加密结合。客户端拿到公钥后,将对称加密的密钥通过公钥加密,然后传给服务器。服务器解密后,双方直接使用密钥进行通信。
中间人攻击
- 但是,这样也不是绝对的安全。
- 考虑这样一种情况,在服务器发送公钥给你的时候,有一个黑客劫持了这个公钥,然后通过自己的主机发送一个新的公钥给你。那么你的数据发送给黑客的时候,他就可以通过自己的私钥进行解密,然后它就继续将你的信息通过劫持的公钥发给服务器。
- 这样,表面上,你和服务器都认为在和对方通信,实质上所有的数据都被黑客窃取。
针对中间人攻击,我们要解决两个问题:
1,如果保证客户端接收到的数据没有被篡改?
- 我们对一份数据使用hash算法,然后得到一份**数据摘要,因为hash算法是单向的,所以很难倒推出源文。然后我们使用私钥对数据摘要进行加密,得到数据签名(指纹)**,将发送的数据和指纹一同发给对方。
- 接收方接收到之后,先使用公钥进行解密,然后得到数据摘要。使用同样的hash算法计算出一份新的数据摘要,两份数据摘要进行对比,如果相同那么就没有被修改。
- 缺点就是,必须保证公钥是正确的。如果公钥不正确,那么无法保证数据的正确。
2, 如何鉴别接收到的数据是服务器发送的,而非黑客发送的?
-
一般比较安全的服务器都会进行公证,这里的公证是指有权威部门办法ca证书,证书包括了公钥私钥、以及该服务器的一些权威信息等。
-
操作系统会自带证书,用来证明数据是否来自中间人。