HTTPS
1、什么是对称加密?什么是非对称加密?
所谓对称加密就是客户端和服务器共用一套密钥,该密钥可用于加密一段内容,同时也可用于解密这段内容。对称加密的优点是加解密效率高,但是在安全性方面存在一定的问题,因为密钥存在客户端容易被盗取。对称加密的代表算法有:AES、DES等。
非对称加密稍微复杂一点。它将密钥分为公钥和私钥,公钥存在客服端(是服务器发给客户端的),私钥存在服务器,通过公钥加密的内容必须要私钥才能解密;同样,通过私钥加密的内容只有公钥可以解密。非对称的优点是安全性更高,因为客服端发送给服务器的内容只有服务器的私钥才能解密,不用担心被别人截获。但缺点就是加解密效率要比对称加密差的远。非对称加密的代表算法有:RSA、ELGamal等。
那么既然https是安全性更高的传输协议,它是使用的对称加密还是非对称加密呢?
传统的http协议存在哪些问题?由于数据在该协议下传输是明文传输,因此可能存在以下两点问题:
1、数据容易被监听
2、数据容易被篡改
如何对传统的http进行改进?
1、将明文传输的信息改为加密信息进行传输。
问题来了,加密存在两种形式,到底是选择对称加密还是非对称机密呢?
网络传输信息非常讲究效率,因此在确保安全性得到提升的同时应该尽可能的选择效率更高的对称加密。
通过对数据加密,确实可以提升数据传输的可靠性,但是却存在一个大漏洞,浏览器和网站怎样商定使用什么密钥呢?
我们发现:浏览器和服务器无论如何商定,第一次传输数据都是明文的,所以始终无法创建一个安全的对称加密密钥。
因此单纯的使用对称加密是无法解决安全性问题的,还得引入非对称加密。
如何将对称加密和非对称加密结合起来使用呢?
在客户端随机生成对称加密密钥,但是该密钥不是直接放在网络上进行明文传输的,而是通过服务器发送给客户端的公钥进行加密传输,服务器在收到数据后通过私钥进行机密,获得对称加密密钥,从而保证对称密钥不会泄露。
在浏览器和服务器进行第一次交互的时候使用非对称加密的方式进行数据传输,保证对称加密密钥的安全性,当客户端和服务器都拥有了相同的密钥之后使用对称加密方式进行数据传输。从而保证数据传输的高效性。
问题又来了,服务器发送给客户端的公钥如何保证是安全传输呢?万一公钥被篡改,客户端用加公钥机密,盗窃者再用加公钥破解,信息就丢失了。
这里就要引用CA机构了,其实CA机构就类似一个代理人,但是注意这个代理人不是黄牛,因为不是所有网站都能成为CA机构(全球只有几家)
1、服务器将自己的公钥交给CA机构,CA机构会把网站的公钥和其它信息进行打包,并应用CA机构自己的私钥进行加密,并把加密后的数据返回给服务器。
2、当有客户端访问服务器的时候,服务器将加密内容发给客户端,那么客户端如何解密CA机构的机密内容呢?其实前面已经说了,CA机构只有几家,所以一般终端操作系统内都预设存储了CA机构了公钥了。这样客户端就能正常获取服务器的公钥啦!
此时,盗窃者篡改发给浏览器的信息,浏览器就无法解析成功,这就说明请求服务器的信息被盗窃了!
**但是,还是有问题:**如果一个恶意网站也去CA机构进行认真,并把自己的加公钥放入CA通过私钥加密的的数据中,然后再替换服务器发送给客户端的加密信息。此时客户端通过本地CA公钥同样能解密,然后通过假公钥进行数据加密传输,这样信息就泄露了!
到底咋搞啊???
恶意网站确实可以获取CA机构的私钥然后替换服务器发送给客户端的信息,但是,当CA机构在用自己的私钥机密时,不仅加密服务器的公钥还要加上服务器的域名。
当客户端通过本地CA公钥解密CA私钥加密数据后,看看里面的域名和所访问的域名是否一样,如果一样,才进行数据加密传输,否则不传输。
到这里https的安全等级已经很高啦!
当客户端成功拿到服务器的公钥的时候就能通过公钥加密对称密钥,然后进行数据传输了!棒
总结以下流程:
1、服务器将公钥发给CA机构
2、CA机构将服务器公钥及服务器域名通过CA机构的私钥进行加密(俗称“证书”)并返回给服务器、
3、当有浏览器发送请求给服务器时,服务器将证书发给浏览器
4、浏览器通过存储在本地CA公钥对证书进行解析,然后获得公钥及域名并判断域名是否为目标域名
5、若为目标域名,则说明安全。此时已经获取到了服务器的公钥。
6、浏览器将对“称加密的密钥”通过公钥进行加密,然后发给服务器,服务器通过私钥进行解密获取对称加密密钥。
7、然后就能进行对称加密进行数据安全传输了。
前4步获取服务器公钥,为了通过非对称加密传输进行下一步的对称加密传输。