HTTPS(SSL/TLS)是计算机网络的知识,主要用来对HTTP协议传输的文本进行加密,提高安全性的一种协议。
因为HTTP是明文传输,所以会很有可能产生中间人攻击(获取并篡改传输在客户端及服务端的信息并不被人发觉),HTTPS加密应运而生。
非对称加密,就是用一个密钥对数据进行加密和解密。
对称加密,就分为公钥和私钥,公钥加密的数据可以用私钥解密,私钥加密的数据可以用公钥解密。
① 采用非对称加密,传输数据时无论是服务器向客户端,还是客户端向服务器,发送密钥,都是有可能被窃取的
② 采用对称加密,服务器有公钥A私钥a ,服务器给客户端发送公钥A的明文(会被窃取);
客户端有公钥A,使用其加密数 据 发送给服务器;
服务器拥有私钥a,可以获得数据(中间人没有私钥a无法解密);
由于客户端只有公钥A,服务器只有使 用私钥加密客户端才能获得数据,此时中间人和客户端都拥有公钥A,数据被窃取。
③ 既然一组对称密钥可以实现单项的安全传输,那如果是实现的是两组呢:
服务器有公钥A私钥a,客户端有公钥B私钥b;
服 务器向客户端发送公钥A;
客户端向服务器发送公钥B;
客户端向服务器发送数据用公钥A加密(只有服务器有私钥a);
服务器 向客户端发送数据用公钥B加密(只有客户端有私钥b)。
这样虽然不会被中间人窃取数据,但这样太耗时了,不合适。
④ 采用对称和非对称结合的方式:
服务器有公钥A私钥a;
客户端向服务器发送请求,服务器发送公钥A的明文数据给客户端(会被窃取);
客户端根据公钥A制作一份私钥x,使用公钥A对私钥x加密发给客户端(只有客户端有私钥a);
此时服务器和客户端都拥有了私钥x,后面采用对称加密的方式传输数据
危害:服务器发送公钥A的明文数据给客户端;
中间人截取公钥A,把自己的公钥B发给客户端(中间人有私钥b);
客户端不知道这个公钥B是否是服务器的,制作私钥x,使用公钥B加密私钥x发给服务器;
中间人截取,使用私钥b获得私钥x,中间人使用公钥A对私钥x加密发给服务器(服务器不知道私钥x已被窃取);
问题:让客户端能够确认收到的公钥,是对应请求的服务器的?
解决:使用数字证书( 网站在使用HTTPS前,都要向CA机构申领 )传输,数字证书中包含浏览器的公钥数据,持有者信息。
问题:保证数字证书不被修改?
解决:采用数字签名的方式:
使用散列函数生成数据对应的散列值,使用签名者的私钥对散列值加密,获得签名;
签名和证明附加到数据上,发送;
客户端收到数据,对数据使用散列函数生成散列值1;
使用签名者的公钥对加密后的散列值解密,获得散列值2;
比较1 和 2 是否相等