大家都知道https。是http协议上多加了一层SSL协议进行加密的,只知道它安全确不了解它为什么安全,那今天就来简单说一下:

HTTP:

首先http是不安全的,明文传输数据,容易被黑客抓包抓到,那么怎么办呢?需要对数据进行加密,那如何进行加密?

对称加密:

在客户端发送数据之前,服务器就生成的密钥传输给客户端,在之后客户端发送数据的时候使用该密钥进行加密。之后客户端与服务端的数据传输就使用该密钥进行加解密。那这样带来的问题就是密钥本身也是明文传输的,那黑客也同样能劫取到密钥,然后使用密钥对用户的数据进行解密,那和明文传输有什么分别?(黑客:哈哈,你这不是逗我呢)接下来引入另一个主角“非对称加密

非对称加密

加密的方法还是需要传输密钥,可问题出在了如何将密钥安全传输到服务器。然后就出现了公钥和私钥这种东西,我叫他“阴阳钥",并且让客户端和服务器都拥有两把钥匙,一把钥匙是公开的(公钥),一把钥匙是私密的(私钥)。两把钥匙,用公钥加密的数据,必须对应的私钥才能解密。相反,用私钥加密的数据,必须是对应的公钥才能解密。
在传输数据的时候客户端先发送自己的公钥给服务器,然后服务器使用该公钥对数据进行加密。客户端收到以后再用自己的私钥进行解密。相反客户端向服务器传输也是一样。这下终于能保证数据的安全传输了。可是又出现了另外一个棘手的问题:加密的速度慢了很多倍。这可怎么办?几个程序员讨论了半天 结合了两种方式:”对称加密+非对称加密

对称加密+非对称加密

使用非对称加密的方式来加密“密钥”,然后使用对称加密的方式来加密传输的数据。

具体流程:服务器先明文发送自己的公钥给客户端,然后客户端在发送数据前会生成一把密钥并且使用服务端的公钥来加密。如此一来,这把加密后的密钥就只能服务器来解密。相反,客户端也有自己的”阴阳钥“,服务器用客户端的公钥来加密,客户端用自己的私钥来解密。这就达到了安全传输数据的目的。以上说得可能有点绕,要弄懂公钥、私钥、密钥之间的关系。可这真的安全吗?(黑客:有两下子,但是我用自己做的公钥冒充服务器的公钥发给你进行欺骗,那我就得到你的密钥,依然在我掌控之中哈哈)

几个程序员有点懵,但是冷静下来思考发现存在的问题就是 无法保证公钥的来源是否真是服务器。经过几天的讨论,推出了一种新的方式:数字证书

数字证书

首先成立了一个有公信力的认证中心(CA)值得信任的第三者:服务器在一开始就需要向CA申请证书(下载一个证书到服务器上)。当然客户端收到服务端的证书会存储在本地(有个容器专门存储证书)。

当在服务器给客户端传输公钥的过程中会把公钥和服务器的个人信息通过自己的hash算法生成信息摘要。为了防止被人调换,服务器会用CA的私钥对摘要进行加密形成”数字签名“,最后把没进行hash算法生成的公钥及个人信息与这个加密后的数字签名合并在一起,就形成了所谓的数字证书。
在客户端收到数字证书后,就会用去本地证书列表里找合适的公钥来对证书里面的数字签名进行解密以及hash算法得到信息摘要,然后把数字证书里面的摘要和外面的摘要进行对比,如果一样,就证明这个来源一定是服务器。这样就能安心的使用服务器的公钥进行加密了,保证了公钥的安全性。(黑客:糟糕,解不开数字签名,冒充不了,可恶的第三者)

关于服务端搭建https及自动跳转https的内容可以关注我的其他文章。


洛阳醉长安行
57 声望3 粉丝

charging...