目录
- HTTPS加密
- 1.加密和解密
- 2.对称加密
- 3.非对称加密
- 4.中间人攻击
- 5.证书
HTTPS加密
1.加密和解密
1.明文: 要传递的原始信息。 2.密文: 经过加密后的信息。 3.加密就是指将明文(要传输的信息)按照指定的方式进行变换,生成密文。 4.解密就是指将密文按照指定的方式进行变换,还原成为明文。 5.在加密通信中,密钥(Key)是指用于加密和解密数据的一个由比特串组成的秘密值,它可以是一个单独的比特串或者一组密钥对。密钥被用于加密和解密数据 |
2.对称加密
对称加密是一种常见的加密通信方式,在对称加密中,加密和解密所使用的密钥相同.
只有在拥有加密和解密密钥的双方之间,才能成功地完成加密和解密的过程。对称加密使用一种特定的算法来将明文数据加密成密文,只有用密钥才能将密文还原成明文。
优势:如下图所示,使用对称加密后,即使黑客入侵拿到了请求内容,也不知道密钥是什么,自然无法解密,那么他拿到的数据就没有任何意义。而客户端和服务器都知晓密钥,客户端使用密钥加密,服务器使用密钥解密,由此保证了安全性。
缺点:由于客户端不止一个,每次都会有很多的客户端访问服务器,每个客户端都需要和服务器有其特定的密钥,而每个客户端的密钥都是不同的。
若是这么多的密钥都由服务器管理未免负载过大,所以最好的方案是客户端生成密钥,然后把这个密钥告诉服务器,服务器保存这个密钥。
但是在客户端将密钥告诉服务器的过程是通过网络通信来实现的,那么就很有可能被黑客拦截到。如下图所示,当客户端告诉服务器密钥是1111的时候,黑客就已经拦截了传输数据并且获取到了密钥是1111,那么此后的各种加密解密过程,黑客可以使用手中的密钥进行解密,如此一来,后续的任何操作都毫无意义了。
3.非对称加密
为了弥补对称加密的不安全性,保证密钥不泄露,就需要对密钥进行加密,但如果对密钥使用对称加密,解密的时候就要用加密的密钥解密,如此重复套娃,还是会发生密钥的密钥泄露的情况。所以可以使用非对称加密方式对密钥进行处理。
非对称加密需要使用一对密钥,一个公钥,一个私钥;公钥用来加密,私钥用来解密。
1.服务器生成一对公钥和私钥,公钥公开出去,任何人都能拿到公钥,包括黑客,而私钥只有服务器自己有。 2.客户端拿到公钥后,使用公钥对对称密钥进行加密,将加密后的密钥密文通过网络传输给服务器。 3.黑客也可以拦截到客户端发出的密文请求,但黑客只有公钥,没有私钥,无法对密文解密,此时密文请求就安全的传输给了服务器。 4.服务器拿到密文请求后,通过私钥对密文进行解密,得到对称密钥。 5.黑客没有私钥,无法解密客户端发出的密文请求,也就无法得到对称密钥,那么后续客户端和服务器就可以安全的使用对称密钥进行加密解密了。 |
4.中间人攻击
非对称加密看似足够安全,但是仍然存在中间人攻击的风险.具体过程如下图所示:
1.服务器生成一对公钥public1和私钥private1,自己持有私钥,将公钥公开出去。 2.客户端通过网络获取服务器的公钥。而黑客也可以自己生成一堆非对称密钥public2 和 private2,黑客将服务器公开的public1记下来,然后返回给服务器自己生成的公钥public2(模仿服务器来骗客户端)。 3.客户端拿到假的公钥public2后,使用public2对称密钥1111进行加密。 4.客户端将密文请求发给服务器时,黑客拦截此请求,并根据自己的私钥private2对客户端的密文请求进行解密,由此得到了对称密钥1111。 5.为了防止被发现自己在中间搞鬼,黑客b把对称密钥1111通过之前记住的正确的公钥public1重新加密,再继续发送给服务器(模仿客户端来骗服务器)。 6.服务器拿到该密文请求后,使用自己持有的私钥private1进行解密,得到了1111的对称密钥。 7.由此,客户端与服务器之间沟通密钥的过程已经完成,后续将按照1111的对称密钥进行交互。黑客作为中间人的身份,伪造双方的请求,已经知晓了对称密钥,所以后续数据传输的加密也形同虚设。 |
5.证书
为了避免出现中间人攻击的隐患,就需要想办法让客户端能够识别其获取到的公钥是服务器发布的正版公钥,还是黑客伪造的虚假公钥,此时就需要引入第三方的公证机构,证书 = 公钥 + 身份标识;其交互过程如下图所示:
客户端在校验证书时,通常会执行以下步骤: 1.客户端向服务器请求证书:客户端发起与服务器的连接请求时,会要求服务器提供数字证书。 2.客户端获取证书:服务器将数字证书传输给客户端。证书通常包括服务器的公钥、证书颁发机构(CA)的公钥、证书有效期和服务器域名等信息。客户端获取证书后会对证书的有效性进行校验。 3.校验证书:客户端使用颁发机构的公钥对证书进行解密,从而获得服务器的公钥。接着,客户端计算服务器公钥的指纹,并将该指纹与数字证书中的指纹进行比较,以确保证书未被篡改或伪造。 4.建立信任:如果客户端成功验证了数字证书的有效性,那么客户端将信任该数字证书,并将服务器的公钥保存在本地。客户端和服务器之间的通信将使用该公钥进行加密和解密。 |