什么是HTTPS

  • 时间:2018-06-20 22:27 作者:石头大V 来源:石头大V 阅读:80
  • 扫一扫,手机访问
摘要:先通过一个例子理解一下https,如我们要实现A可以发一个消息给B。要实现以下功可以A发给B的hello消息包,即便被中间人阻拦到了,也无法得知消息的内容对于这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称加密等,加密算法只是处理方案,首先要做的是了解我们的问题——什么是安全?这个例子

先通过一个例子理解一下https,如我们要实现A可以发一个消息给B。

什么是HTTPS

要实现以下功可以

A发给B的hello消息包,即便被中间人阻拦到了,也无法得知消息的内容

对于这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称加密等,加密算法只是处理方案,首先要做的是了解我们的问题——什么是安全?

这个例子的了解是:

A与B通信的内容,有且只有A和B有可以力看到通信的真正内容

问题已经定义好了,对于处理方案,很容易就想到了对消息进行加密。

对于A与B这样的简单通信模型,我们很容易做出选择:

什么是HTTPS

这就是对称加密算法,其中图中的密钥S同时扮演加密和解密的角色,只需这个密钥S不公开给第三者,同时密钥S足够安全,就处理了一开始所定问题了,由于世界上有且只有A与B知道如何加密和解密他们之间的消息,但是在WWW环境下Web服务器的通信模型没有这么简单:

什么是HTTPS

假如服务器端对所有的用户端通信都用同样的对称加密算法,无异于没有加密,那怎样办呢,即可以用对称加密算法,又不公开密钥,答案是Web服务器与每个用户端用不同的对称加密算法:

什么是HTTPS

另一个问题来了,我们的服务器端怎样告诉用户端该用哪种对称加密算法?当然是通过协商,但是协商的过程是没有加密的,还会被中间人阻拦,那我们再对这个协商过程进行对称加密就好了,那你对协商过程加密的加密还是没有加密,怎样办?再加密不就好了,这就是鸡生蛋蛋生鸡的问题了。

如何对协商过程进行加密?密码学领域中,有一种称为“非对称加密”的加密算法,特点是私钥加密后的密文,只需是公钥,都能解密,但是公钥加密后的密文,只有私钥能解密,私钥只有一个人有,而公钥能发给所有的人,尽管服务器端向A、B……的方向还是不安全的,但是至少A、B向服务器端方向是安全的。

处理了用非对称加密算法进行对称加密算法协商过程,你明白为什么HTTPS同时需要对称加密算法和非对称加密算法了吧,要达到Web服务器针对每个用户端用不同的对称加密算法,同时也不可以让第三者知道这个对称加密算法是什么,怎样办,用随机数,就是用随机数来生成对称加密算法,这样即可以做到服务器和用户端每次交互都是新的加密算法,只有在交互的那一该才确定加密算法。

你明白为什么HTTPS协议握手阶段会有这么多的随机数了吧,如何得到公钥,细心的人可可以已经注意到了假如用非对称加密算法,用户端A,B需要一开始就持有公钥,要不没法展开加密行为啊,我们又遇到新问题了,如何让A、B用户端安全地得到公钥?可以想到的方案只有这些:

方案1、服务器端将公钥发送给每一个用户端。

方案2、服务器端将公钥放到一个远程服务器,用户端能请求得到。

选择方案1,由于方案2又多了一次请求,还要另外解决公钥的放置问题,公钥被调包了怎样办,方案1有个问题:假如服务器端发送公钥给用户端时,被中间人调包了,怎样办?

什么是HTTPS?

显然让每个用户端的每个浏览器默认保存所有网站的公钥是不现实的,只有用第三方机构的公钥处理问题了。公钥被调包的问题出现,是由于我们的用户端无法分辨返回公钥的人究竟是中间人,还是真的服务器。这其实就是密码学中提的身份验证问题,假如让你来处理,你怎样处理?

假如你理解过HTTPS,会知道用数字证书来处理。但是你想过证书的本质是什么么?既然服务器需要将公钥传给用户端,这个过程本身是不安全,那么我们为什么不对这个过程本身再加密一次,可是你是用对称加密,还是非对称加密,又是一个鸡生蛋蛋生鸡问题了。

问题的难点是假如选择直接将公钥传递给用户端的方案,我们始终无法处理公钥传递被中间人调包的问题,所以不可以直接将服务器的公钥传递给用户端,而是第三方机构用它的私钥对我们的公钥进行加密后,再传给用户端。用户端再用第三方机构的公钥进行解密,下图就是“数字证书”,证书中只有服务器交给第三方机构的公钥,而且这个公钥被第三方机构的私钥加密了。

什么是HTTPS

假如可以解密,就说明这个公钥没有被中间人调包。由于假如中间人用自己的私钥加密后的东西传给用户端,用户端是无法用第三方的公钥进行解密的,但是现实中HTTPS,还有一个数字签名的概念,如第三方机构不可可以只给你一家公司制作证书,它也可可以会给中间人这样有坏心思的公司发放证书,这样中间人就有机会对你的证书进行调包,用户端在这种情况下是无法分辨出是接收的是你的证书还是中间人的,由于不管中间人,还是你的证书,都可以用第三方机构的公钥进行解密。

要处理这个问题,首先要想清楚一个问题,辨别同一机构下不同证书的这个职责,应该放在哪,只可以放到用户端了,用户端在拿到证书后,自己就有可以力分辨证书能否被篡改了,如何才可以有这个可以力呢,从现实中找灵感,比方你手上拿到候选人的学历证书,证书上写了持证人,颁发机构,颁发时间等等,同时证书上,还写有一个最重要的证书编号!怎样鉴别这张证书是的真伪呢?只需拿着这个证书编号上相关机构去查,假如证书上的持证人与现实的这个候选人一致,同时证书编号也可以对应上,那么就说明这个证书是真实的,我们的用户端可以不可以采使用这个机制呢,如果这个“第三方机构”究竟是在哪呢,是一个远端服务,假如是个远端服务,整个交互都会慢了,所以这个第三方机构的验证功可以只可以放在用户端的本地了。

用户端本地怎样验证证书呢?答案是证书本身就已经告诉用户端怎样验证证书的真伪,也就是证书上写着如何根据证书的内容生成证书编号。用户端拿到证书后根据证书上的方法自己生成一个证书编号,假如生成的证书编号与证书上的证书编号相同,那么说明这个证书是真实的,同时为避免证书编号本身又被调包,所以用第三方的私钥进行加密,使用图帮助了解,证书中的“编号生成方法MD5”就是告诉用户端,你用MD5对证书的内容求值即可以得到一个证书编号。

什么是HTTPS

当用户端拿到证书后,开始对证书中的内容进行验证,假如用户端计算出来的证书编号与证书中的证书编号相同,则验证通过:

什么是HTTPS

但是第三方机构的公钥怎样跑到了用户端的机器中呢,由于用户端接收到的证书中会写有颁发机构,用户端就根据这个颁发机构的值在本地找相应的公钥,说到这里想必大家已经知道上文所说的,证书就是HTTPS中数字证书,证书编号就是数字签名,而第三方机构就是指数字证书签发机构(CA)。

CA如何颁发数字证书给服务器端的?

如何向CA申请呢?每个CA机构都大同小异,如图:

什么是HTTPS

拿到证书后,即可以将证书配置到自己的服务器上了,那么如何配置?留给大家百度了,通过推算的方式尝试复原HTTPS的设计过程。这样我们也就明白了为什么HTTPS比HTTP多那么屡次的交互,为什么HTTPS的性可以会差,以及找到HTTPS的性可以优化点,都是为了让用户端与服务器端安全地协商出一个对称加密算法。这就是HTTPS中的SSL/TLS协议主要干的活,剩下的就是通信时双方用这个对称加密算法进行加密解密,以下是一张HTTPS协议的真实交互图

什么是HTTPS?

使用一段话来总结HTTPS:HTTPS要使用户端与服务器端的通信过程得到安全保证,必需用的对称加密算法,但是协商对称加密算法的过程,需要用非对称加密算法来保证安全,然而直接用非对称加密的过程本身也不安全,会有中间人篡改公钥的可可以性,所以用户端与服务器不直接用公钥,而是用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全,这样通过这些机制协商出一个对称加密算法,就此双方用该算法进行加密解密,从而处理了用户端与服务器端之间的通信安全问题。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2019年web前端开发技术框架有哪些(2019-07-20 12:06)
【系统环境|】什么是Web?零基础能不能学Web前端开发?(2019-07-19 07:04)
【网页前端|HTML】为什么学Web前端?选择Web前端理由(2019-07-17 20:28)
【网页前端|JS】Java面经-百度新入职老哥整理近半年学习经验,面试刷题路线!(2019-07-16 22:16)
【网页前端|HTML】最全面的前端开发指南(2019-07-15 12:57)
【系统环境|数据库】零基础如何快速学好大数据?(2019-06-29 12:27)
【系统环境|Linux】零基础如何学好大数据?必备需要学习知识(2019-06-18 11:54)
【系统环境|】Hadoop环境中管理大数据存储八大技巧(2019-06-15 11:01)
【系统环境|服务器应用】现在国内IT行业是不是程序员过多了?(2019-06-11 06:34)
【系统环境|服务器应用】新贵 Flutter(2) 自己设置 Widget(2019-06-11 06:34)
手机二维码手机访问领取大礼包
返回顶部