切换语言为:繁体
为什么是我们需要HTTPS以及HTTP是如何演变成HTTPS的

为什么是我们需要HTTPS以及HTTP是如何演变成HTTPS的

  • 爱糖宝
  • 2024-08-14
  • 2051
  • 0
  • 0

在写这篇文章的时候,复制地址栏的内容,可以得到https://www.codeuphub.com/front/template/598/view/article。 可以看到codeuphub是使用的HTTPS协议。 当鼠标hover过去的时候,可以看到有提示连接是安全的,所以HTTPS的主要作用是保证链接的安全。

为什么是我们需要HTTPS以及HTTP是如何演变成HTTPS的

那么问题来了,HTTP为什么是不安全的?

HTTP明文传输的风险

HTTP一开始诞生在学术界,目的很单纯,就是为了传输超文本内容,那个时候也没有很强的信息加密需求,所以HTTP一直保持着明文传输数据的特征。

但是随着互联网的发展,数据越来越多,传输的内容也越来越多,互联网在人们生活中的影响不断扩大,在信息过程中搞小动作谋取利润的场景也诞生了。HTTP的明文传输就会面临着,在传输过程中的任一环节,数据都有可能被窃取或者篡改,好比传输过程有个中间人,把通信过程的一切内容都掌握其中。

为什么是我们需要HTTPS以及HTTP是如何演变成HTTPS的

如上图所示,在通信过程中,信息被第三方拦截篡改的情况,业界称为中间人攻击

具体来说,在HTTP将数据提交给TCP层后,数据会经过用户电脑、WIFI路由器、运营商和目标服务器,在这其中的任一环节,数据都有可能被窃取或篡改。比如用户电脑被黑客安装了恶意软件,那么这些恶意软件就能抓取和篡改所发出的HTTP请求的内容。如果是连上了钓鱼WIFI,那么数据也可能被抓取和篡改。所有信息流经的链路,都可能把信息进行拦截和篡改。

HTTP的安全应对策略——协议栈加入安全层

HTTP的明文传输会让传输过程毫无安全性可言,且制约了网上购物、在线转账等一系列场景应用,倒逼我们去思考安全的信息传输方案。

在信息传输的网络进行修改,让通道安全是不现实的方案,故而需要从数据包本身下手,寻求突破口,对数据包进行加密是目前采用的方案。

从HTTP协议层面来看,可以在HTTP层和TCP层之间插入一个安全层,所有经过安全层的数据都被被加密或者解密。

为什么是我们需要HTTPS以及HTTP是如何演变成HTTPS的

从上图可以看出,HTTPS并不是一个全新的协议,而是在HTTP的基础上加入了一个安全层,没有改动到HTTP协议也没有改动到TCP/IP。安全层的主要职责有两个,一是对发起HTTP请求的数据进行加密操作,二是对接收到HTTP的内容进行解密操作。

当下HTTPS的请求流程

请求流程分析

为什么是我们需要HTTPS以及HTTP是如何演变成HTTPS的

整个流程具体如下:

  • 浏览器将自己支持的对称加密列表、非对称加密列表、client-random发送给服务器

  • 服务器选择一个对称加密套件(也就是加密的方法)、非对称加密套件、service-random服务器的数字证书,发送给浏览器

  • 浏览器验证数字证书——digital certificate 的合法性。( 首先读取数字证书中的明文信息,采用Certificate Authority相同的Hash函数计算来得到信息摘要A,然后利用CA的公钥解密签名数据,得到信息摘要B,对比A、B一致即可确认证书是合法的,同时浏览器还会验证证书相关的域名信息、有效时间等信息 )

  • 浏览器生成一个随机数pre-master,利用服务器的公钥(数字证书里面包含了服务器公钥)加密,发送给服务器。

  • 服务器用自己的私钥解密后得到pre-master, 用client-random + service-random + pre-master组合生成对称加密密钥master secret

  • 浏览器也用client-random + service-random + pre-master组合生成对称加密密钥master secret

  • 后续的通信流程都用对称加密密钥master secret进行加密解密,确保信息的安全。

以上就是整个HTTPS的完整请求流程

上面的流程提到了数字证书,它起到一个怎样的作用,以及如何申请的呢?

数字证书的作用和申请流程

数字证书的作用

数字证书主要有两个作用,一是证明服务器的合法性,也就是服务器A确实是A,另一个就是存储服务器的公钥信息。

为何需要验证服务器的合法性呢? 我们的输入到地址栏的一般是服务器的域名,需要进行DNS解析才能得到服务器的IP地址,如果黑客通过DNS劫持,把IP地址指向了黑客服务器,浏览器的通信对象就变成了黑客服务器而无从得知。

数字证书的申请流程

网络世界引入了一个权威机构,称为CA(Certificate Authority) 负责给服务器颁发证书,颁发的证书就称为数字证书(Digital Certificate),这两者好比派出所和和身份证的关系。

通常的申请流程分为以下几步:

  • 服务器需要准备一套私钥和公钥,私钥自己留着

  • 服务器向CA机构提交公钥、公司、站点等信息并等待认证,这个认证过程可能是收费的

  • CA机构通过线上、线下等多种渠道来验证服务器所提供的信息的真实性,如公司是否存在、企业是否合法、域名是否归属该企业等

  • 如果信息审核通过,CA会向服务器签发认证的数字证书,包含了服务器的公钥、组织信息、CA的信息、有效时间、证书序号等,这些信息的都是明文的,同时还包含CA生成的签名。

CA生成的签名过程如下:

  • 首先CA使用hash函数计算服务器提交的明文信息,等到信息摘要

  • CA使用它的私钥对信息摘要进行加密,加密后的密文就是CA颁发给服务器的数字签名 (相当于人民币上的防伪水印)。

总结

  • HTTPS通过增加TLS安全层对信息传输过程的数据包进行加密解密

  • 安全通信过程的建立是需要非对称加密和对称加密组合在一起使用。

  • DNS解析过程可能会被黑客拦截,所以增加了CA机构给服务器颁发数字证书以验证服务器身份。

  • 数字证书上会包含服务器的公钥、公司、域名等信息,通过hash函数计算这些信息得到信息摘要A,再使用CA的公钥对数字签名进行解密等到信息摘要B,如果A、B一致,证明服务器身份是合法的。

  • 传输过程的对称加密密钥使用client-random + service-random + pre-master(需要非对称加密传输双方确认)组合生成的master secret

0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.