相比于http,https由于采取加密策略,数据保护安全性更高而被使用,今天主要聊聊其加密过程。
首先需要知道的一点是,https会有四次握手的说法。
其过程如下
1、客户端C向服务器S发送连接,其中带有的信息为随机数A以及加密算法等信息;
2、服务器S返回信息,其中带有的信息为协商好的加密算法以及证书(公钥)信息;
3、客户端C利用外层为非对称加密(内容为对称加密算法相关信息以及‘hello,我们以后用对称加密吧’(这句话是便于理解写的));
4、由于利用非对称加密算法,服务器可以利用私钥对内容进行解密从而提取里面的对称加密算法以及密钥,并返回信息:‘好的,利用对称加密进行数据加密吧’;
5、正常进行数据交流。
聊几个问题。
1、服务器的公钥与私钥问题
对于这个问题,首先需要理解一点是,私钥是服务器本身的(仅服务器拥有),且公钥(可看作长度为n的文本字符串)是利用加密算法(比如RSA算法)进行生成的,也就是说私钥只有服务器拥有,而公钥在传送过程中容易被中间人窃取。
2、公钥是在哪里存放的?
上面的第2步中,客户端会返回一个证书,而证书中会有公钥信息以及服务器的域名信息,而每个电脑上都可以拥有该证书,当浏览器返回该证书时,会对该证书进行检查,查看证书的有效性以及对应的域名地址是否是自己请求的地址。
3、证书的来源
证书通常由第三方机构进行颁发,每个电脑上都会拥有这些证书,但是需要知道的一点就是,通常第三方机构(如openSSL)颁发的证书时会让申请https服务器的公司向自己所提交的域名服务器进行一个操作验证(如向该域名服务器下提交一个文件),正是这个证书有这个验证操作,那么中间人就无法伪造证书了,因为中间人攻击无法完成向该域名服务器提交某文件的操作。
4、非对称加密以及对称加密
非对称加密:公钥加密私钥解密;私钥加密公钥解密。仅有这2种情形可以完成加密与解密的过程,但是速度比较慢;
对称加密:双方具有同一密钥进行解密和加密,优点是速度快,但是不安全。
显然,如果只利用对称加密,让密钥在网络中传输,且密钥是作为解密和加密的唯一工具,一旦泄露,那么后果极为严重。而如果只利用非对称加密,那么客户端只有公钥,那么意味着服务器端需要利用私钥加密,而公钥作为会在网络中传输容易被中间人进行攻击,服务器返回的数据会被泄露。
所以https利用这种混合加密就可以解决这个问题,其利用非对称加密对对称加密算法的相关信息进行加密,因为是非对称加密,且在网络中仅有可能泄露的是公钥,所以利用非对称加密算法的性质(公公–你懂的~~),而到了服务器端利用私钥进行解密,得到里面的对称加密算法以及数据,那么客户端以及服务端就都可以用对对称加密的密钥,从而后面的数据传输都用对称加密算法,不仅速度快还可以解决中间人攻击问题。
参考
HTTPS演化过程:https://blog.csdn.net/u014465934/article/details/81370111
HTTPS系列干货(一):https://zhuanlan.zhihu.com/p/27395037
HTTP和HTTPS协议,看一篇就够了:https://blog.csdn.net/xiaoming100001/article/details/81109617