https的基本原理,看完你的程序员女朋友再也不和你提分手了

【http风险】

首先,我们来讲一下平时上网的时候,存在的风险。

初步接触过网络的同学都知道,网络上是很不安全的,尤其是各种公共场合的免费WIFI,以及手机上各种免费上网的万能钥匙。这些不安全因素会导致什么问题呢:

  1. 泄密,各类的个人信息,保存的小电影,淘宝的账号密码
  2. 篡改,收到的信息被别人修改,或者植入木马
  3. 伪装,访问到假的网站,比如访问淘宝访问到钓鱼网站,访问中日友好影院访问到澳门独家线上赌场。

   

当然了,还有一些特殊的情况,比如说你在夜深人静的夜,访问某91网站,实际上你那做程序员的女朋友在另外一个房间,正在陪着你看,甚至你顺手回了前女友一个消息,就算你及时删除,却还是没躲过那双程序员的眼睛。

   

   

很多同学已经比较了解http以及tcp/ip了,对于什么三次握手四次挥手也是熟的不能再熟了。http属于应用层协议,位于五层网络参考模型的最上层,小刘的数据包通过应用层,传输层,网络层,链路层封装之后,再经过物理层传输到兰兰的主机,在这几层中,数据都没有经过封装,所以,你的数据特别容易被中间的女朋友倩倩获取。

   

我们今天就来说一说,如何避免你的程序员女朋友盗取你的信息,趁机和你提分手。

   

【对称加密】

信息如果想要不被盗取,就要经过加密,现在的加密算法大致可分为两类,一类是对称加密,一类是非对称加密

我们先来说说对称加密。

   

对称加密的基本含义,就是算法的加密和解密全都是使用同一个密钥

在一定条件下,对称加密可以解决一部分网络安全问题。因为你和兰兰互相发送的消息,只有你和兰兰知道加密解密密钥,倩倩是不知道的,所以没有办法对你们之间的消息包进行解密,你们可以相互畅所欲言。

   

但是这样是有前提条件的,就是倩倩不知道你们的密钥

如果你和兰兰在约定密钥的时候数据包就已经被倩倩获取了,那你们的行为无异于脱裤子放屁,没有任何意义。

所以,对称加密算法存在的最严重的一个问题就是,密钥协商

   

【非对称加密】

非对称加密算法需要两个密钥,一个叫公钥,一个叫私钥

公钥加密的内容需要用私钥解密私钥加密的内容需要用公钥解密,两个密钥成对出现,缺一不可

私钥由服务器(兰兰)自己保存,公钥发送给客户端(小刘)。

   

小刘拿到公钥就可以把自己的消息加密并发给兰兰了,这个时候就算倩倩截获了,也无法获取消息包的具体内容,保证了小刘发给兰兰的消息的安全性。

非对称加密和对称加密一样,都存在密钥传输的问题,但是至少有一点可以保证,就是客户端发往服务器端的消息不会被泄露

非对称加密还有一个问题,就是加密解密时的效率比较低,严重影响小刘和兰兰谈情说爱。

   

所以我们又有一种办法,就是第一次通信的时候使用非对称加密,由客户端(小刘)产生一个对称加密的密钥,用公钥加密后发给服务器端(兰兰),服务器端用私钥解密之后,就可以使用对称加密发送消息了。

   

这个办法看起来天衣无缝,既解决了密钥协商的问题,又解决了非对称加密效率低的问题。

但是真的就能无所顾及了吗?并不能,我们看看倩倩的如下骚操作:


倩倩伪造了兰兰,也就是说,黑客利用一台主机,伪造了真实的服务器,使用自己的公钥和私钥去和客户端(小刘)进行消息交互,这样不光可以获取消息的内容,还可以伪造消息,从而达到某些不可告人的目的。

   

比如获取你的银行卡密码,直接转走你的所有资金,让你人财两空,再比如获取你的私人信息,让你身败名裂。这些都是非常严重的后果。

   

【数字证书】

那小刘和兰兰就真的没有更加安全的消息交互的办法了吗?

答案当然是,有!

   

现实生活中,我们也会有身份信息的证明,比如你说你是学生,怎么证明?我有学生证;你说你是警察,怎么证明?我有警官证。

   

网上也有这种证书,但是网上的证书不是实体的,所以叫数字证书

   

客户端第一次与服务器进行通信的时候,服务器需要拿出自己的证书,表明自己的身份以及公钥,类似:

                                           

   

那么这个数字证书是怎么产生的呢?总不能自己随便写一个吧。

我们思考一下,我们上面说的学生证,警官证为什么能够被大家所认同呢,是因为学生证是教育部颁发的,警官证是公安部颁发的,上面有唯一的防伪编码,我们上相关部门的网站就可以查询到了,所以我们认同这些证书是因为我们认同教育部和公安部。

数字证书也是一样,有唯一的防伪编码,以及颁发的权威机构

   

【CA机构】

CA机构就像之前说的教育部一样,是权威的证书颁发机构负责颁发证书以及验证证书的合法性

如果服务器需要做一个有身份的服务器,就需要向CA机构提交申请 <价格昂贵> ,需要提供包括域名,公司名称,公钥等一系列信息,CA机构审批后就可以给服务器颁发证书了。

   

客户端拿到证书以后,需要做两件事:

1. 验证证书编号是否可以在CA机构查到

2.核对证书上的基本信息 <比如域名> 是否与当前一致,才可以使用公钥和服务器协商对称密钥进行消息发送。

   

证书颁发之后,如何保证在传输的过程中不被篡改呢? 万一倩倩获取到证书之后,把公钥改成了自己的,岂不是白费功夫?

   

【数字签名】

依旧拿警官证举例子,家里有警察的朋友们应该都知道,警官证上面的内容是不允许涂改的,如果需要修改,必须销毁或者存档旧的警官证,颁发新的警官证并盖章才有效。

   

这个盖章的操作,在网络证书上面叫做数字签名

服务器向CA提出证书申请,CA在颁发证书的时候,会连同数字证书以及根据证书内容产生的摘要一并发给服务器,<摘要相当于MD5,一段绝对不会重复的无规律码>

这个摘要是通过CA的私钥进行加密的,无法进行篡改

   

过程如下:

   

哪些CA机构对于客户端来说是权威或者说是认可的呢?我们打开IE浏览器能看到客户端内置的CA机构的信息,包含了CA的公钥、签名算法、有效期等等。

   

在这之后,服务器在与客户端通信的时候,就可以将数字证书以及数字签名出示给客户端了。

客户端拿到数字证书与签名,会进行如下过程:

  1. 找到操作系统或者浏览器信任的CA机构,使用其公钥对数字签名进行解密计算数字证书的摘要

    如果摘要与服务器发过来的一致,则表明证书没有被篡改。

  2. 从证书里获取服务器公钥,加密对称密钥
  3. 将对称密钥发送到服务器。

   

注意一点:

如果是伪造的数字签名,则在客户端无法做解密

因为CA的私钥是自己负责保管的,别人无法获取得到,所以无法对证书做私钥加密,自然别人也无法使用公钥进行解密。

   

【HTTPS】

好像一直没有提到https。

其实https很简单,就是在http的基础上添加了一个叫做SSL的协议,SSL(Secure Sockets Layer)叫做"安全套接层",后来标准化之后叫做TLS

所以,HTTPS协议就是通过以上的手段,达到网页防伪造,防篡改的成果。

   

 

 

这样,小刘就可以名正言顺得和兰兰一起"月上柳梢头,人约黄昏后",而不被倩倩发觉了。

   

 

   

{写在最后,本文参考了大量网上对于https的理解,大家读完之后还有不懂的欢迎一起讨论}

   

   

   

   

   

   

  

posted @ 2019-06-05 17:17  流年的夏天  阅读(510)  评论(0编辑  收藏  举报