在前面说到HTTP中,我们通过抓包,可以看到许多信息内容,其中往往会包含一些敏感信息,这些都是明文传输,当我们的请求被黑客或者不法分子截获后,那就很危险了,因此衍生出了HTTPS协议来对传输数据进行加密。
一、加密原理
基本原理如下:
明文 + 密钥 => 密文
密文 + 密钥 => 明文
一般加密解密分为两种:
对称加密:加密和解密都是使用相同的密钥。
不对称加密:生成一对密钥,分别为"公钥"和"私钥",使用公钥进行加密,就得使用私钥进行解密。
二、HTTPS的工作过程
要想实现安全的传输,最简单的方法就是进行加密。
由于双方需要进行加密/解密的操作,因此一方需要先生成一个密钥,传给对方,这样双方才能进行正确的数据交换。
虽然对数据进行了加密,但只要想办法拿到密钥就能还原明文了,然后就查看以及修改了。
此时黑客入侵了路由器,这样在客户端发送密钥的时候,黑客也能收到密钥,后续客户端发送的信息也都成了"明文"。
此时就需要想办法如何将密钥安全的发送给服务器呢?那就再进行加密!显然无穷无尽的进行对称加密操作是不行的,这时候就得用上非对称加密了。
说明:
由于非对称运算涉及的算法比较复杂,因此运算量较大,效率比较低,因此对数据进行加密往往使用对称加密的方式。而上述所使用的的非对称加密是针对对称密钥进行加密操作。
虽然非对称+对称加密组合已经是很无敌的配合了,但是还有一种方式可以破解。
中间人攻击:
在上述过程中,黑客通过伪造一对自己的密钥,将服务器的公钥进行替换。
因此要解决上述情况需要让客户端能够确认当前收到的公钥是服务器的,而不是伪造的,这就引入了证书机制。
通过一个第三方的认证机构作为担保,保证当前的公钥是有效的。
证书机制:
服务器想要将生成的对称公钥发送给客户端,需要先去申请一个证书,然后再将证书发送给客户端。其中证书包含了网站域名、服务器的公钥、数字签名等信息。
数字签名是一个类似于校验和的东西,公正机构根据服务器的域名、公钥和其他一些属性进行计算生成校验和,然后再针对生成的校验和使用公正机构的私钥进行加密。
服务器将这个证书发送给客户端,客户端收到后,使用公正机构的公钥对数字签名进行解密,就能得到相应的校验和了,然后再将证书的其他属性进行校验和计算,检查出来是否和解密出来校验和一致,如果一致则说明证书是好的。
上述过程理论上能够实现"服务器将公钥安全送达客户端",但是黑客依旧有办法~
黑客可以伪造认证机构,骗客户端安装自己的公钥,这样就可以进行替换数字签名了......