一、简单通话

我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B

 

 

 

 

 

但是,在WWW环境下,我们的Web服务器的通信模型没有这么简单:

三、如何确定对称加密算法

慢着,另一个问题来了,我们的服务器端怎么告诉客户端该使用哪种对称加密算法/strong>当然是通过协商。

 

 

 

 

 

 

 

 

 

 

虽然服务器端向A、B……的方向还是不安全的,但是至少A、B向服务器端方向是安全的。

好了,如何协商加密算法的问题,我们解决了:使用非对称加密算法进行对称加密算法协商过程。

这下,你明白为什么HTTPS同时需要对称加密算法和非对称加密算法了吧/p>

协商什么加密算法

要达到Web服务器针对每个客户端使用不同的对称加密算法,同时,我们也不能让第三者知道这个对称加密算法是什么,怎么办/p>

使用随机数,就是使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法。

这下,你明白为什么HTTPS协议握手阶段会有这么多的随机数了吧。

五、如何得到公钥/h1>

细心的人可能已经注意到了如果使用非对称加密算法,我们的客户端A,B需要一开始就持有公钥,要不没法开展加密行为啊。

这下,我们又遇到新问题了,如何让A、B客户端安全地得到公钥/p>

我能想到的方案只有这些:

方案1. 服务器端将公钥发送给每一个客户端

方案2. 服务器端将公钥放到一个远程服务器,客户端可以请求得到

我们选择方案1,因为方案2又多了一次请求,还要另外处理公钥的放置问题。

公钥被调包了怎么办是一个鸡生蛋蛋生鸡问题/h3>

但是方案1有个问题:如果服务器端发送公钥给客户端时,被中间人调包了,怎么办画了张图方便理解:

 

 

 

 

 

 

如果能解密,就说明这个公钥没有被中间人调包。因为如果中间人使用自己的私钥加密后的东西传给客户端,客户端是无法使用第三方的公钥进行解密的。

 

客户端能解密同一家第三机构颁发的所有证书:

 

六、数字签名,解决同一机构颁发的不同证书被篡改问题

 要解决这个问题,我们首先要想清楚一个问题,辨别同一机构下不同证书的这个职责,我们应该放在哪/p>

只能放到客户端了。意思是,客户端在拿到证书后,自己就有能力分辨证书是否被篡改了。如何才能有这个能力呢/p>

我们从现实中找灵感。比如你是HR,你手上拿到候选人的学历证书,证书上写了持证人,颁发机构,颁发时间等等,同时证书上,还写有一个最重要的:证书编 !我们怎么鉴别这张证书是的真伪呢要拿着这个证书编 上相关机构去查,如果证书上的持证人与现实的这个候选人一致,同时证书编 也能对应上,那么就说明这个证书是真实的。

我们的客户端能不能采用这个机制呢这样:

 

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

 

拿到证书后,我们就可以将证书配置到自己的服务器上了。那么如何配置是具体细节了,留给大家google了。

 

七、数字证书验证、数字签名

申请者拿到CA的证书并部署在 站服务器端,那浏览器发起握手并接收到证书后,如何确认这个证书就是CA签发的呢样避免第三方伪造这个证书案就是数字签名(digital signature)。数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)。
数字签名的制作和验证过程如下:
1、数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密
2、数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对签名证书内容进行签名,并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功

 

能不能用一句话总结HTTPS/h3>

答案是不能,因为HTTPS本身实在太复杂。但是我还是尝试使用一段话来总结HTTPS:

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

后记

以上是个人为理解HTTPS而编造出来的自圆其说的看法。顶多只能算是HTTPS的科普文章。如有错误,请指出,万分感谢。

那么,我为什么会觉得以这种方式理解HTTPS会更容易呢个人给出的答案是:当你自己为一家人做一次菜时,你就会理解妈妈天天做菜的不易了。

https协议中身份认证的部分是由CA数字证书完成的,证书由公钥、证书主体、数字签名等内容组成。在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证(验证这张证书是否是伪造的就是公钥是否是伪造的),如果证书不是伪造的,客户端就获取用于对称密钥交换的非对称密钥(获取公钥)

数字证书的三个作用:

1、身份授权。确保浏览器访问的 站是经过CA验证的可信任的 站
2、分发公钥。每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥)。在SSL握手时会通过certificate消息传输给客户端
3、验证证书合法性。客户端接收到数字证书后,会对证书合法性进行验证。只有验证通过后的证书,才能够进行后续通信过程

学习资料:

  • HTTPS为什么安全 &分析 HTTPS 连接建立全过程
  • 数字证书的基础知识
  • 理解 HTTPS
  • HTTPS 是如何保证安全的/li>
  • 图解SSL/TLS协议
  • The First Few Milliseconds of an HTTPS Connection
  • SSL/TLS原理详解
  • SSL证书在线工具SSL Online Tools

文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树首页概览22389 人正在系统学习中 相关资源:世新砸蛋抽奖软件V2.3.10官方安装版-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年8月19日
下一篇 2018年8月20日

相关推荐