HTTPS的工作过程
目录
(1)引入对称加密
(2)引入非对称加密
(3)中间人攻击
(4)引入证书
证书如何校验:
在使用HTTP协议通信时,属于明文传输,通过网络传输的请求信息极其容易被网络运营商或者黑客劫持,让HTTP里的header和body直接明文显示出来。
因此为了对请求的信息进行加密,就有了HTTPS协议。HTTPS是在HTTP的基础上,引入了一个加密层(SSL)来对数据进行加密,只要针对HTTPS数据进行解密了,就能够得到HTTP格式的数据。
首先理解:明文=>密文 为加密。 密文=>明文 为解密。
加密过程中涉及到的工具就是密钥。
(1)引入对称加密
加密和解密使用的是同一个密钥。
1.对称加密的时候,客户端和服务器使用的是同一个密钥
2.不同的客户端,需要使用不同的密钥。(因为如果任何一个客户端使用的密钥都相同,那黑客也能拿到,密钥如同虚设)
对称密钥执行流程是,客户端或者服务器一方自动生成一个密钥,然后请求连接另一方,并把确定双方密钥信息。
引入对称密钥后,虽然可以对明文数据加密成密文传输,但是黑客任有可能在中间获取到密钥,当黑客拿到密钥后,此处任相当于是在进行明文传输。还是不安全。
如果我们考虑到能否对密钥(key1)进行加密成(key2), 就意味着也需要把key2也传输给服务器,但是还是可能key2还是可能被黑客拿到。因此我们就要引入非对称加密,主要目的就是为了对对称密钥进行加密,确保密钥安全性。
为什么不直接用非对称加密对headr和body数据加密是因为:非对称加密成本远远高于对称加密,资源消耗大,所以只对对称密钥进行加密性价比高。
(2)引入非对称加密
加密和解密使用的是两个密钥。这两个密钥(A,B)是成对出现的,如果使用A加密那就只能用B解密,反之亦反。
服务器公开出去的称为“公钥”,自己保存的称为“私钥”。(手里有一把密钥的话,是无法知道另外一把的)
一般来说我们可以让服务器自动生成一对公钥和私钥, 私钥只存在服务器端,公钥提供给任何需要的一方,非对称加密过程如下:
(3)中间人攻击
非对称加密看似比较安全,但是但是也存在严重安全问题,问题就出在了第一步。
客户端请求公钥大概流程
客户端和服务器双发都感知不到中间黑客的存在,安全问题也暴露出来了。
针对上面问题,解决办法的最关键一点就是,客户端拿到公钥时,能有办法验证公钥是不是真的,而不是黑客伪造的。因此就有了引入证书的这样一个方法。
(4)引入证书
那么上面的这一套操作,可能还会害怕证书的公钥或者其他内容被黑客修改了返回给客户端,那么最重要的就是证书的校验了。
证书如何校验:
证书是一段很长的字符串,也是一个结构化数据,里面包含了好几个字符段属性,例如:服务器域名,证书的有效时间,服务器的公钥,公正机构信息.......最关键的是证书的签名。
公证机构自己有一对公钥和私钥,会把证书中除证书签名的其他字段通过一系列算法(该算法客户端能够知道),生成一个校验和,然后用自己的私钥进行加密后发放证书。
首先,把证书中除证书签名的其他字段通过一系列算法,生成一个较短的字符串,得到检验和1。
然后,使用系统中内置的公证机构公钥,对证书的签名进行解密,得到校验和2。
如果校验和1 和 校验和2 一直那么证书是没有问题的, 如果不一致那么证书就是被篡改过。