理解HTTPS

为什么要有HTTPS

HTTPS的出现主要是为了解决HTTP协议在安全性上的不足

HTTP的不足

HTTP是被广泛使用的web协议,但其在安全性上存在以下不足:

  • 明文通信,内容可能被窃听
  • 不验证通信方身份,通信方可能是伪装的。
  • 不验证报文的完整性,报文可能被修改。
明文通信

进行web通信时,通信线路上的设备可能分布与世界上的任何角落,这些网络设备、光缆、计算机等很多都是公用的。在这种情况下,要抓取通信的报文并非难事。

HTTP使用明文通信,如果通信报文被抓取,通信的内容就很容易被解毒出来。因此会有信息被窃取的隐患。

不验证通信方的身份

HTTP协议本身比较简单,任何人都可以发起请求,任何人也都可以返回响应。

HTTP协议不会对请求和响应的通信方进行验证。对于客户端来说,它不能保证与它通信的服务器是否就是其请求的URI中指定的主机;对于服务器来说,也不能保证它的响应是否真正传递给了实际提出请求的客户端。

不验证报文的完整性

完整性,也可以认为是准确性。

HTTP报文在传输过程中会经过很多设备,这些设备经常是公用的。恶意的攻击这可以在这些设备转发报文时篡改报文的内容。

HTTPS

HTTPS可以有效解决刚刚提到的三个问题。我们先看下HTTPS的原理和通信过程,再讨论HTTPS是如何解决HTTP的三个缺点的。

基本概念

HTTPS并不是一种新的协议,而是把HTTP通信接口部分用SSL和TLS协议代替。

HTTP协议是直接与TCP通信。而HTTPS是HTTP通过SSL/TLS与TCP通信,即给HTTP协议加了一层外壳。从协议栈来看,是在应用层和传输层之间增加了安全层。

对称加密

加密和解密使用同一个密钥。

非对称加密

加密和解密使用不同的密钥。一般会把其中一个密钥公开,成为公钥。另一个自己保存,成为私钥。

混合加密

通信过程中既使用了对称加密,又使用了非对称加密。

一般是通过非对称加密做通信协商,协商出一套对称密钥,然后利用这套对称密钥传输数据。HTTPS通信中,对称密钥是利用随机数生成的,每个客户端都不一样,因此需要协商。

数字签名

HTTPS中,数字签名是根据消息内容生成的一串“只有自己才能计算出来的数值”。

数字签名是用来验证通信方身份的。

数字签名采用了非对称加密的方式,消息的发送方(服务器)使用私钥生成数字签名,消息的接收方利用发送方(服务器)提供的公钥验证数字签名,以此验证消息发送方的身份。

在数字签名的概念中,私钥是加密密钥,公钥是解密密钥。加密密钥为消息生成数字签名(指明消息的发送方身份),解密密钥验证数字签名。这里利用了“没有私钥的人无法生成使用该密钥所生成的报文”这一性质。

签名是可以被复制的,但这并不影响其发挥作用。因为数字签名是根据特定消息内容绑定在一起的,它是用来验证特定的消息最初的发送方是谁,一旦消息的内容跟原始内容不一致,数字签名就不能验证通过。

数字证书

数字证书其实就是为公钥加上数字签名。

对于Web通信来说,数字证书就是认证机构对服务器的公钥、服务器的基本信息等施加数字签名。

这里其实就涉及到三个角色:客户端、服务器、认证机构,以及两套非对称加密:客户端与服务器之间的,客户端与认证机构之间的(也就是有两对公、私钥)。

服务器有自己的私钥,然后把服务器的公钥交给认证机构;认证机构利用认证机构的私钥对服务器的公钥施加数字签名,客户端利用认证机构的公钥加密认证机构下发的证书,从而获得服务器的公钥。

通信开始前,三方要含有一下信息:

  • 服务器: 自己的私钥
  • 认证机构: 自己的私钥 + 服务器的公钥
  • 客户端:认证机构的公钥(即信任认证机构的证书,浏览器上一般都默认会信任很多认证机构的证书)

HTTPS通信过程

初始阶段:

  1. 客户主机安装客户端(如浏览器), 客户端内置了CA机构公钥。
  2. 服务端向CA机构上传自己的公钥,获取CA机构认证的数字证书。

连接通信阶段:

  1. 客户端要发起对服务端的请求。
  2. 服务端下发CA机构认证过的数字证书给客户端。
  3. 客户端利用内置的CA机构的公钥,对数字证书进行验证。并从数字证书中获取服务器公钥。
  4. 客户端使用服务器的公钥与服务器建立加密通信,协商数据通信时的加密算法和对称加密秘钥。
  5. 客户端和服务器使用协商的算法和密钥进行数据通信。

HTTP的三个问题是如何解决的?

  1. 明文通信问题:

    HTTPS的数据通信是使用了对称密钥进行加密的,只有知道密钥的人才能获取解读数据内容。而我们前面的分析看到对称密钥只有客户端和服务器知道。

  2. 身份认证问题:

    首先,客户端是从信任的认证机构获取到服务器的公钥的。这个公钥加密的密文只有对应的私钥能解密,而对应的密钥只有服务器有。因此,对与客户端而言,可以验证能够与之进行后续通信的只有服务器。

    另一方面,数据通信时的对称密钥是随机生成的,每个客户端都不一样,因此服务器可以以此验证客户端的身份。

  3. 报文完整性问题:

    既不能读取报文内容,也不能伪装成通信任何一方,那就不能篡改报文了。因此报文的完整性也可以得到保障。

一些问题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值