一、前言
1.通信的加密(报文传输通道的加密,即对称加密算法协商过程的加密)
2.内容的加密(报文主体的加密,即对称加密,报文首部并不加密)
二、概念
HTTP通过和SSL/TLS协议的组合使用,加密HTTP的通信内容。
(TLS是标准化后的SSL协议的名称,二者是同一个协议)
用SSL/TLS建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。注意,这里的通信并非明文通信,是采用协商好的对称加密算法进行通信。(详情见后文)
与SSL/TLS组合使用的HTTP被称为HTTPS。
三、HTTPS的创建过程
概念明确 —— 什么叫安全?
A与B通信的内容,有且只有A和B有能力看到通信的真正内容
1.【问题一:如何保证A、B通信消息的安全?】
Step1:
【要达到的目标】
A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容
【目标的实现】
使用对称加密算法,加密A、B通信的内容。
2.【问题二:在www环境下,并不是一对一通信,如果服务器端对所有的客户端通信都使用同样的对称加密算法,无异于没有加密。因为攻击者作为一个客户端,也会知道加密的算法,并能够进行解密。怎么办?】
【答案】
Web服务器与每个客户端使用不同的对称加密算法。
与每个客户端通信都使用不同的密钥,即便攻击者作为客户端与服务器进行通信,也只能解密服务器发给它的消息,无法窃听到服务器与其他客户端的通信内容。
对称加密算法的生成:
使用随机数。保证服务器和客户端每次交互都是新的加密算法、只有在交互的那一刻才确定加密算法。
3.【问题三:我们的服务器端怎么告诉客户端该使用哪种对称加密算法?】
【答案】
通过协商。
4.【问题四:协商的过程没有加密,如果被中间人拦截,则采用的对称加密算法泄漏,怎么办?】
【答案】
加密这个过程。
Step2:
【要达到的目标】
加密对称加密算法的协商过程。
【目标的实现】
使用非对称加密算法。
非对称加密的特点:
私钥加密后的密文,只要是公钥,都可以解密。但是公钥加密后的密文,只有私钥可以解密。
私钥只有一个人有,而公钥可以发给所有的人。
(私钥加密 ——> 公钥解密,公钥加密 ——> 私钥解密)
【注意】
这里,A、B向服务器方向是安全的。服务器向A、B方向,依然不安全,因为每个客户端都可以解密私钥加密后的信息。
5.【问题五:如何让客户端得到公钥?】
【答案】
服务器端将公钥发送给每一个客户端。
6.【问题六:服务器端发送公钥给客户端的过程,如何保证安全?】
公钥发送过程中可能被中间人掉包:
【答案】
不能直接将服务器的公钥传递给客户端。
让第三方机构使用它的私钥对我们的公钥进行加密后,再传给客户端。
客户端再使用第三方机构的公钥进行解密。
我们的公钥经过第三方机构加密后,就是数字证书:
数字证书发放给我们的服务器,客户端向服务器发送请求,请求证书,然后再用第三方机构的公钥去解密它。
【注意】
到这里,只要客户端能用第三方机构的公钥成功解密数字证书,就说明公钥没有被中间人调包。
因为如果中间人拦截了真公钥,并使用自己的私钥加密假公钥再传给客户端,客户端是无法使用第三方的公钥进行解密的。
7.【问题七:第三方机构不可能只给你一家公司制作证书,它也可能会给中间人这样有坏心思的公司发放证书。这时候,中间人可能会拿自己的证书,掉包你的证书,而只要是第三方机构发放的证书,都是通过机构的私钥加密,也就都能够用他们的公钥解密,客户端解密假的证书,也就拿到了假的公钥。怎么办?】
持有同一家第三方机构证书的中间人可以进行调包:
【答案】
数字签名,解决同一机构颁发的不同证书被篡改问题。
(数字签名相当于证书的编号,类比学历证书)
客户端可以通过证书上的编号,向第三方机构验证、当前的证书是不是发给我们服务器的那个证书。
8.【问题八:向第三方机构验证的过程需要发送远端请求吗?】
【答案】
不需要。
这个第三方机构的验证功能放在客户端的本地。
9.【问题九:客户端本地怎么验证证书呢?】
【答案】
证书上会写着如何根据证书的内容(XX.com,XX网的公钥)生成证书编号。
客户端拿到证书后根据证书上的方法,按照自己的公司名称、域名等,生成一个证书编号,如果生成的证书编号与证书上的证书编号相同,那么说明这个证书是真实的。
10.【问题十:如何避免证书编号本身又被调包?即:中间人将自己的证书写上为我们的证书编号。】
【答案】
使用第三方的私钥加密证书编号。
注意:
当中间人拦截到我们的证书,他可以解密我们的证书编号(其实也不需要解密,知道编号生成规则和想要攻击哪个公司,中间人自己就可以生成这个证书编号)。
但是,并不能完成掉包。
即使中间人将自己的证书编号篡改为我们的证书编号,但他无法完成用第三方机构的私钥加密我们的证书编号这个过程。因为,中间人伪装加密后的证书编号,客户端是无法用第三方机构的公钥解密的。如此,保证了真实证书编号的安全。
11.【问题十一:客户端机器如何拿到第三方机构的公钥?】
【答案】
现实中,浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)。因为客户端接收到的证书中会写有颁发机构,客户端就根据这个颁发机构的值在本地找相应的公钥。
因此,
客户端拿第三方机构公钥的过程,没有通信,是不存在安全隐患的。
12.【问题十二:第三方机构是如何颁发证书给服务器的?】
【答案】
第三方机构颁发证书给我们的网站管理员,我们的管理员将这个数字证书放到我们的服务器上。
如何向第三方机构申请?每个机构大同小异:
拿到证书后,我们就可以将证书配置到自己的服务器上了。
四、后记
1.概念总结:
证书 ——> 数字证书
证书编号 ——> 数字签名
第三方机构 ——> CA
2.HTTPS中的SSL/TLS协议:
协议的目标:
让客户端与服务器端安全地协商出一个对称加密算法。
即,上述从第四步开始,加密协商过程,就是HTTPS中的SSL/TLS协议主要干的活。
3.HTTPS的缺点:
多次交互及加密,性能差。
4.HTTPS总结:
HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
整理自:
https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651552875&idx=1&sn=fdcc0d73fbaa4e08511e8b3cd33bd46f&chksm=8025abaab75222bc389f4b51cd6bab07fe5cf9d2078444b3019b2c2874158ab5e3e75a9c143e&mpshare=1&scene=1&srcid=1020YIvaGuwmXMKMRZISH1wP&key=fad56b9f33c8aaf8e909919aba4cfd291f52f42d68794c120e36e6061a56223597b2460e619c44a43f6e6878d5f9135a744459a4e251ae147d19cc444a80bc5e508e51988828bba24832146739a20e59&ascene=0&uin=Mjg3MDc5MzAwMA%3D%3D&devicetype=iMac+MacBookPro13%2C2+OSX+OSX+10.12.1+build(16B2657)&version=12020010&nettype=WIFI&lang=zh_CN&fontScale=100&pass_ticket=9q%2BJ42uR8ayzaXbdF7Td21hqgtMYNsmBuOEImC4B6dDkLBlfqgnQ6qqFsaxCjcsL