当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信。
首先数据在传输的过程中,数据可能被中间人抓包拿到,那么数据就会被中间人窃取;
其次数据被中间人拿到后,中间人可能对数据进行修改或者替换,然后发往服务器;
最后服务器收到数据后,也无法确定数据有没有被修改或替换,当然,如果服务器也无法判断数据就真的是来源于客户端;
总结下来,http存在三个弊端:
1)无法保证消息的保密性;
2)无法保证消息的完整性和准确性;
3)无法保证消息来源的可靠性。
这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。
服务器每次发送真实数据前,会先生成一把密钥传输(密钥容易被劫持)给客户端,服务器给客户端发送的真实数据会先用这把密钥进行加密,客户端收到加密数据后再用密钥进行解密(客户端给服务器发送数据同理)。
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
服务器在给客户端发送真实数据前,先用客户端明文传输给服务器的公钥进行加密,客户端收到后用自己的私钥进行解密,反之同理
https使用对称加密+非对称加密(以非对称加密的方式传输对称加密密钥),接着就可使用对称加密的密钥传输数据。
鉴于非对称加密在加密时速度特别慢,对称加密又不够安全。可以将对称加密与非对称加密结合起来,充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS 采用对称加密和非对称加密两者并用的混合加密机制。
可以使用使用数字证书(即找到一个大家都认可的认证中心CA)证明客户端接收的公钥是属于服务器的。
服务器在给客户端传输公钥的过程中,会将公钥+服务器个人信息通过hash算法生成信息摘要,为防止信息摘要被掉包服务器会用CA提供的私钥对信息摘要加密形成数字签名。最后还会将设有进行hash算法计算的服务器个人信息+公钥和数字签名合并在一起形成数字证书
https那么的安全,是不是我们在什么场景下都要去使用https进行通信呢?答案是否定的。
1)https虽然提供了消息安全传输的通道,但是每次消息的加解密十分耗时,消息系统资源。所以,除非在一些对安全性比较高的场景下,比如银行系统,购物系统中我们必须要使用https进行通信,其他一些对安全性要求不高的场景,我们其实没必要使用https。
2)使用https需要使用到数字证书,但是一般权威机构颁发的数字证书都是收费的,而且价格也是不菲的,所以对于一些个人网站特别是学生来讲,如果对安全性要求不高,也没必要使用https。
原文:https://www.cnblogs.com/xjy20170907/p/12622723.html