虽然现在许多网站都会用到HTTP和HTTPS,但是大家极力倡导使用的却是更为安全的HTTPS,今天我们就来了解一下HTTPS是如何保证数据传输的安全性的。
1.HTTP的缺点
2.HTTPS如何保证数据安全性
3.对称加密和非对称加密
4.HTTPS的请求过程
5.如何防止数字证书被篡改
6.单双向认证
1、为什么说HTTP不安全?
HTTP本质上就是一个TCP连接,只不过协议规定了使用80端口,以及发送命令或数据的格式,而TCP本身是没有加密的功能。致命的是,HTTP在数据传输过程中,数据就是以明文的方式传输的,由于数据没有被加密,所以很容易出现数据窃听、篡改或者是身份伪造的不安全的行为。
有什么优化的方法?
既然使用明文进行数据传输不安全,那我们可以尝试一下对数据进行加密处理。比如,通信双方可以约定一种算法,首先将需要发送的数据按照一定的规则进行加密,然后对方接收到消息后按照相同的规则进行解密。这个就是对称加密的体现形式了。
所谓对称加密,即原文和密文可使用一个相同的密钥进行加密和解密,即使用同一把密匙对原文加密得到密文或者是对密文解密获取到原文。其优点是加密解密效率较高。
2、HTTPS如何保证数据安全的呢?
在HTTPS数据传输过程中对数据进行加密处理,HTTPS是使用对称加密和非对称加密、签名算法(签名算法不是用来做加密的)以及证书机制来对消息进行处理,以此达到一个安全的有效传输。
HTTPS是基于HTTP的上层添加了一个叫做TLS的安全层,对数据的加密等操作都是在这个安全层中进行处理的,其底层还是应用的HTTP。HTTPS通信先是使用非对称加密进行密钥的协商,协商出一个对称加密的密钥,之后的通信则采用这个对称密钥进行对称加密密文传输。因为非对称加密其算法极其复杂,导致解密效率低下,而对称加密效率则明显高出百倍。
在上面我们提到过,对明文使用同一把密钥进行加密和解密是属于对称加密。那么非对称加密又是怎样的呢?
非对称加密
非对称加密,即原文加密和密文加密使用的是两个不同的密钥,一把称之为公钥,一把称之为私钥,使用公钥加密的内容可以通过私钥进行解密,同样,使用私钥加密的内容使用公钥可以进行解密。公钥和私钥是相对而言的,通常而言,保留在己方不对外泄露称之为私钥,可公布公开的称之为公钥。
在这里,我们需要引入一个新的名词:数字证书。
数字证书
所谓证书,就是服务端从网站公证处备案申请的一个身份证这样的一个东西,里面包含有有效期开始时间、结束时间、证书持有人、签名以及最关键的持有人的公钥信息等。通常情况下,我们会为服务端配置SSL证书,SSL证书是数字证书的一种,由受信任的数字证书颁发机构(简称CA)颁发,具有服务器身份验证和数据传输加密的功能。
就好比我们访问亿佰特网站,我们怎么知道我们访问的亿佰特网站是否是一个假的呢,所以我们通常在访问时,先去获取对方网站的证书信息,然后和本地浏览器载入的证书进行比较看是否是安全的。
3、HTTPS的请求过程
在上面我们简单介绍了一下HTTPS和数字证书,但是它们是如何来解决HTTP中存在的数据窃听、数据篡改、身份伪造问题的呢?
上图是HTTPS简单的请求模型,使用这个模型可以完美的解决上面提到的三个问题点。
在第一次请求时,客户端先去请求服务端的数字证书,并且生成一个随机数R1,将随机数和自己支持的加密算法告诉服务端。
服务端收到客户端的请求后,选择双方共同支持的加密算法,并且生成新的随机数R2,将服务器的数字证书及加密算法、随机数一并返回给客户端。
客户端收到服务端的数字证书,然后使用浏览器内置的CA证书进行解密获取到证书中的服务端的公钥及服务端的认证信息,从而确保证书没有被人篡改过。然后生成新的随机数R3,使用服务端的公钥对随机数R3进行加密后返回给服务端并将随机数R1、R2、R3组合成一串密钥用作对称加密用。
上述就是HTTPS对密钥协商的过程,由于非对称加密一方密匙加密后只能使用另一方密匙解密,所以在前两次数据传输中即使被窃听也不怕,因为在第三次传递随机数R3时是使用公钥加密的,只有服务端的私钥才能解密,从而确保密钥的安全性。
4、如何防止数字证书被篡改
我们在申请数字证书时,会提供我们的基本信息以及企业域名信息等,证书颁发机构CA会根据证书中的这些信息以及所提供的签名算法对内容进行摘要,得到一个消息摘要(散列hash串),即使用Hash算法获取到的一个唯一标识,然后CA机构会使用自己的私钥对摘要进行加密,获取到一个密文,即数字签名,也叫做指纹;表示其唯一性。然后证书颁发机构对整个明文数字证书使用证书颁发机构CA自己的私钥进行加密,得到数字证书。
单双向认证
双向认证的情况通常比较少见,常见于银行等领域,就像我们以前使用银行的U盾,这就是一种双向认证案例,还有就是在电脑上安装支付宝的证书等;双向认证比单向认证更加安全,但是需要对每一个客户端都进行分配证书。