https原理解析

最近公司分享会讲了这块的内容,于是就学习了一下。
在客户端和服务器中作怪的中间人无非做三件事:
窃听、假冒、篡改
https的出现就是为了防止中间人作怪的。

这里要引入两个概念:

  • 对称加密: 对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
    其加密过程如下:明文 + 加密算法 + 私钥 => 密文 解密过程如下:密文 + 解密算法 + 私钥 => 明文
    对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
    其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
  • 非对称加密: 非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
    被公钥加密过的密文只能被私钥解密,过程如下: 明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
    被私钥加密过的密文只能被公钥解密,过程如下: 明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
    由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
    非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
    在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。

开始

想想,两方通讯若是直接明文传输,相当于打电话中开着扬声器,巴拉巴拉,周围的人都能听到,有危险的几率不言而喻。
所以我们就要加密,用什么方法呢,由于非对称加密的耗时长,耗费资源也大,自然用对称加密就足够。两两之间拥有只有他们知道的对称算法,获得私钥,用此来对明文加密后进行传输,就是最好的方案了。
那么怎么能确定只属于他们的专属对称算法呢。
随机数。通过随机数产生对称算法。
那双方要怎么沟通好是哪个随机数呢?
如果这个随机算法被中间人捕获了不就功亏一篑吗?
那就自然也要对这个数进行加密。用那种加密方式呢?
这里我们想想,如果也用对称加密的话,那这个对称加密的公钥又是什么呢?再创建一个随机数?那不就死循环了嘛?
那这里我们就得用非对称加密了。
由服务器端产生私钥,然后将公钥分发给每个向它发出服务请求的客户端,客户端产生随机数,用公钥加密一下,再反发送给服务器端,服务器端用私钥进行解密,两方就都拥有这个由随机数产生的私钥了。

这样就可以保证客户端发送给服务端的信息是安全的,毕竟中间都没有服务器的私钥进行解密,从而后续的对称加密算法进行传输是安全的。

仔细想想,这个过程还是有问题。
如果服务器端一开始发的公钥就是中间人自己创建的,那接下来的对话不就是客户端和中间人两方的了吗?

这里我们没法了,必须得有权威的第三方 (CA) 介入一下,不然两方永远也证明不了对面是自己真正想传输的。
这个第三方是要有公信力的,通过他的证明,能证明“我是我”,就像身份证的作用一般。第三方机构可以有很多个,但是最上层一定是只有一个,即root CA,其他的公司若也想成为第三方机构,必须向最上层申请。

于是就引入了数字证书+数字签名
能在服务器向客户端发放公钥的时候就证明服务器的信息,真实性。

客户端要怎么验证这个呢?

答案是证书本身就已经告诉客户端怎么验证证书的真伪。
也就是证书上写着如何根据证书的内容生成证书编号。客户端拿到证书后根据证书上的方法自己生成一个证书编号,如果生成的证书编号与证书上的证书编号相同,那么说明这个证书是真实的。
可见,其实第三方的这个证书也是加密过的,但是这个解密方法是公布的。是不是和非对称加密很像。

其实就是这样的,当服务器申请证书的时候,第三方会用自己的私钥加密一下,它的公钥是公布的,每个浏览器都会有,当客户端收到服务器发来的这个证书时,会在自己的地方遍历这个第三方机构的解密算法来解密,就可以进行下去了。

那我来重新理一下流程

  1. 客户端向服务器端发出请求
  2. 服务器端有非对称加密产生的公钥和私钥,将自己的私钥留下,将公钥和第三方机构用非对称加密产生的私钥进行加密的能证明自己身份的数字证书和签名发送给客户端
  3. 客户端查看到数字证书签名所属的第三方机构,用该第三方机构的公钥进行解密,得知服务端的信息,即就是自己想要进行请求的一方。然后生成随机数,这个随机数用随机数算法产生一个对称加密的公钥,再将该公钥用服务器端发来的公钥进行加密,发送给服务器端。
  4. 服务器端用自己的私钥进行解密,拿出对称加密的公钥,这样双方就都得到了双方独有的,协商完毕的公钥,此后用此公钥进行内容的加密/解密传输即可

参考:https://www.wandouip.com/t5i334824/

发布了57 篇原创文章 · 获赞 3 · 访问量 6187

猜你喜欢

转载自blog.csdn.net/qq_39830579/article/details/103745093