简述HTTPS协议
HTTPS协议并不是对HTTP协议的改动,而在HTTP协议之下增加了一层
SSL层用于处理对HTTP报文的加密,然后TCP/IP对加密的报文进行传输。反过来,若是服务端将HTTP密文发送到客户端,客户端需要接收,TCP/IP负责接收报文,然后往上层输送,最后,再由SSL层对数据进行解密,解密后才到达应用层。
了解HTTPS协议之前,还需了解一下对称加密与非对称加密。
对称加密
客户端和服务端都使用同一套密钥进行报文的解密,我们称其为对称加密。
异或运算
异或运算就具有加密的特性,也是属于对称加密的一种,下面来演示一下对称加密的过程。
我们知道计算机底层的运算都是通过二进制进行的,
举个例子,我们现在讲10011101
我们目前的密钥是01101100
异或运算实质是将二进制位相同的值取0,不同位取1,则我们可以知道。
明文:10011101
密钥:01101100
密文:11110001
在此我们可以得到加密后的结果,与加密前大相径庭
但我们如果需要还原密文呢,我们就得使用密钥对加密后的数据再进行一次异或:
密文:11110001
密钥:01101100
明文:10011101
在此我们就将明文成功还原了。
上面就是对称加密的全过程,只要我拥有了密钥,我就可以解密你的信息。
- 优点:加密速度快。加密方法简单。
- 缺点:拥有了密钥就可以对其进行解密,所以安全性不高
非对称加密
在对称加密中,由于必须将密钥发至对端,则期间可能遭到中间人截获,导致HTTP报文可能被篡改等安全问题,非对称加密应运而生,在非对称加密中使用了复杂的算法,实现密钥的以下特点。 在了解非对称加密之前,先来解释一下:
- 公钥:公钥顾名思义就是公开的密钥,会发给多个持有人,这也是我们HTTPS需要对外传输的密钥,对端使用公钥加密己端需要用私钥解密。
- 私钥:私钥持有人只能有自己一个,且在数据传输中不传输。
非对称加密特点:公钥加密的报文只能使用私钥解密,私钥加密的报文只能用公钥解密。正是因为这个特点,我们称之为非对称加密。
常见的非对称加密有:RSA,DSA
传输报文时使用公钥,私钥不放至报文内传输,极大的提高了安全性,同时,由于算法较复杂,性能损耗较大。
对比 对称加密 和 非对称加密
| 对称加密 | 非对称加密 | |
|---|---|---|
| 效率 | 高 | 低 |
| 安全性 | 低 | 高 |
对比对称加密和非对称加密,我们知道,非对称加密虽安全,但每一条HTTP报文都是用非对称加密,性能损耗是相当大的,于是,现在的HTTPS一般采用折中的办法,在建立HTTPS连接时,使用非对称加密,而后的通信中则使用对称加密。下面会详细说明。
HTTP传输中的问题
我们知道HTTP中是使用明文传输的,明文传输一个很大的缺陷就是数据是没有经过任何加密的,很容易被中间人截获。
打个比方,小明要给小张表白,于是他写了一封情书给小张告诉她“我爱你”,但这件事情却给图谋不轨中间人截获了,并在其中修改了内容,由于内容未进行加密,他很容易就获取了其中的内容,并将其修改为“我恨你”,一字之差,导致两人的产生了误会。
但如果两人使用约定俗称的规则进行加密,并且通过一些算法验证信件中的内容是否被修改过,就可以让中间人就无法读懂其中的信件,并且内容被修改后,对方会进行校验。
举一个实际场景:目前有付款人(账户A),收款人(账户B),中间人(账户C)三个账户和一台银行的服务器,账户A向服务器发送一个请求,要求从自己的账户(账户A)转账10元给账户B,此时若在其中未进行任何加密,中间人(账户C)很容易就能截获其中转账金额,转账对象等敏感数据,并将其进行篡改,如,将转账对象改为账户C(中间人自己),将转账金额修改为1000,就能神不知鬼不觉的将1000元偷走,而在从中如果未做任何验证的话,账户A通常是无法感知的。
那如何对数据进行加密呢,通过上述对称加密与非对称加密的对比我们可以知道,对称加密的加密方法虽然快速,但是加密时必须将密钥一起传输出去,在这期间容易被中间人截获并对其进行解密,从而篡改数据,非对称加密虽然安全,性能开销却较大,如果完全用非对称加密的做法,真的能够安全的将数据传输出去吗?但事实却是,不论你如何加密,你都需要将密钥传输到对端,否则对方将无法通过密钥对数据进行解密,那么如何解决这个问题呢?
数字认证机构
既然明文传输密钥不可取,那么我们就需要通过第三方权威认证机构来对密钥等信息进行加密。什么意思呢,打个不太恰当的比喻: 某985的大学生需要入职某公司,那么公司是如何校验其学历的呢?通过学信网这个第三方权威认证机构可以认证此985大学生毕业证书的真假。这就是第三方权威认证机构的作用。以下是来自百度对数字认证证书的解释:
数字认证证书它是以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的安全性、完整性。 使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全。 简单来说就是保障你的在网上交易的安全。
数字认证的流程:
- 服务器先将IP地址、域名、公钥等信息发送给数字认证机构。
- 数字认证机构收到服务器提供的这些信息后,会对这些信息进行哈希处理生成一个哈希值,将IP、域名,服务器公钥哈希值等信息放到证书中,并返回给服务器。
这么做的目的是为了保证密钥不以明文方式出现在数据包中。
HTTPS流程
现在的浏览器中,通常内置了常用数字认证机构公钥,下面说一下如何与服务器进行数据交换。
- 客户端请求服务器
- 服务器返回数字认证机构给的证书
- 客户端由于内置了数字认证机构的公钥,可以使用公钥对服务器返回的证书进行解密(这里注意证书是用数字认证机构的私钥进行加密的)
- 解密之后我们可以得到里面的信息(服务器IP,域名、公钥等信息)
- 由于都用非对称加密会产生效率问题,所以服务器会先生成对称密钥并且通过公钥加密发送给服务器。
- 服务器接收对称密钥并使用自己的私钥进行解密。
- 下面就可以正常通过对称密钥进行正常的数据交换了。
我们可以看出,密钥在整个HTTPS流程中,从不以明文方式出现,全程加密,这就使中间人攻击的成本大大增加。
优点:
- 安全性高,使中间人攻击的成本大大增加
- HTTPS权重更高,可用于优化SEO。
缺点:
- 额外的性能消耗。
- 数字认证证书需要花费一定的成本。