数字签名,数字证书,HTTPS

前言

众所周知https和http相比更加安全一些,是由于https通过了加密。可是https具体是怎样进行加密来对抗通讯过程当中的各类劫持和篡改呢。它又是怎样站在用户的角度保障用户访问的页面是安全的,站在网站的角度一样会保障网站不会被恶意攻击。想经过这篇文章大概进行一些梳理。将围绕如下两点进行分析:算法

  • 加密的方式
  • 加密在具体应用场景中体现出来的安全性

加密的方式

加密有两种算法:对称加密和非对称加密安全

  • 对称加密:加密和解密的密钥同样,好比用123456来加密就用123456进行解密。密码也都是以数据的形式在网络中进行传输的,这样的话一旦123456被泄露,中间人截取了这个请求,加密就会直接被攻破。
  • 非对称加密:把密钥分为公钥和私钥,公钥是公开的全部人均可以认领,私钥是保密的只有一我的知道。大部分状况下,公钥的做用是对内容自己加密,保证不被其余人看到。私钥的做用是证实内容的来源是否可信,公钥和私钥是配对关系,公钥加密就用私钥解密,反之亦然。接下来咱们逐层的去分析这个加密的过程。

Level 1

A要给B发一封邮件,不想让其余人知道邮件内容,因而用B的公钥对内容进行加密后发送,B在收到邮件后用本身的B私钥进行解密。这样一来即便中途这封邮件被中间人拦截,这个中间人没有B的私钥也只能获得一堆乱码,毫无心义。网络

可是这样通讯的问题是B天天会收到各类各样的邮件,它没法区分邮件的来源。若是有黑客冒充A的身份,也用B的公钥加密了一封邮件发送(前面说过公钥是全部人均可以认领的),此时B解密后的获得的邮件其实并非A真实的诉求内容。为了可以区分邮件的来源,A和B换了一种通讯方式:性能

A为了保证B收到的邮件都是本身本人发送的,因而用A私钥加密内容而后发送,B接收的时候用A公钥解密。这样因为A私钥的惟一性能够保证只有A能处理这封邮件。可这样显然是不妥的,由于A公钥的公开性,任何劫持到邮件的中间人均可以知道邮件内容了。网站

显然,这种单方面用公钥或是私钥加密行为不管怎样都会出现漏洞,因此他们引入了数字签名来进行进阶版的加密传输,也就是Level 2。加密

Level 2 (数字签名)

既然用公钥活私钥来传输都有漏洞,那就把公钥和私钥结合起来使用。A先把邮件用A私钥加密一次,再用B公钥加密一次,两层加密后发送。B在收到邮件后先用B私钥进行解密,再用A公钥进行解密。这样一来,中间人既没有B的私钥去破解邮件内容,也没有A的私钥去冒充A的身份。这个传输过程显然比Level 1更加严谨。可是这样有一个弊端:hash

对文件自己加密多是个耗时过程,好比这封邮件足够大,那么用A私钥加密整个文件以及拿到文件后的解密无疑是巨大的开销。其实A私钥的此次加密只是为了证实信息来源是否可信,因此大可没必要对所有内容进行加密。因而A先对整个文章执行哈希运算获得一个hash值。针对这个hash值用A私钥加密,附加到邮件的后面。这就是咱们常说的数字签名了。而后再把全部内容用B公钥进行加密后发送。it

B收到邮件后的步骤:首先用B私钥进行解密,获得邮件内容和A的数字签名。再用A公钥解密数字签名获得hash值1。最后B对邮件内容执行一次哈希运算也获得一个hash值2。用这个hash值2对比数字签名的hash值1,若是同样就说明文件内容没有被篡改过,近乎完美又不失性能。class

但是即使这样,依然是有漏洞的。若是中间人C就是想作点坏事,他能够去B的电脑上把A公钥悄悄换成本身的C公钥(毕竟公钥是有公开性的,人人能够拿到)。接下来生成本身的数字签名。B那边接收的时候层层校验都会经过。最后C仍然能够冒充A的身份去欺骗B。乱码

这种防不胜防的感受是否是有点崩溃,坚持一下,就要差最后一步就要成功了。如今咱们整个加密,传输环环相扣。惟一的问题就出在了A公钥太容易被替换了。那怎样来保障A公钥呢,就是咱们接下来要说的数字证书了。

Level 3 (数字证书)

A要保护本身的A公钥进而保护传输的安全性,首先A去找"证书中心"(certificate authority,简称CA)为A公钥作认证。证书中心用本身的私钥,对A公钥和一些相关信息一块儿加密,生成"数字证书"。而后A发给B的邮件后面除了数字签名还会加上这个数字证书。

B接受到之后首先用CA获得公钥解密校验数字证书,获得A的公钥,拿到A的公钥后的解密步骤就和Level 2同样了。

这样下来A公钥多了一层加密程序。想要在A公钥上动手脚除非拿到CA的私钥。CA的私钥就成了如今的安全漏洞了。若是中间人如今又拿到了CA的私钥怎么办呢。

他拿不到!CA是一个颇有权威的社会机构了,能够默认它的私钥是不会泄露的,若是有一天CA私钥泄露了应该会后果不堪设想。至此,就真的完美了。

加密在具体应用场景中体现出来的安全性

大概捋顺了加密的过程,可是在用户访问咱们的网站的时候面对大量的请求,具体是怎样校验这些请求是否包含恶意请求的。用户又怎么避免访问到恶意网站呢

暂时没捋清楚,后面及时来更新哈哈哈。

相关文章
相关标签/搜索