https对称加密、非对称加密、数字证书的理解以及为何安全

你们都知道https。是http协议上多加了一层SSL协议进行加密的,只知道它安全确不了解它为何安全,那今天就来简单说一下:程序员

HTTP:

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

对称加密:

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

非对称加密

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

对称加密+非对称加密

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

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

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

数字证书

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

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

关于服务端搭建https及自动跳转https的内容能够关注个人其余文章。方法

相关文章
相关标签/搜索