浅谈 HTTPS

本文详细介绍了HTTPS协议,包括其基于TLS/SSL的加密机制,工作流程,特点(安全性、可信性和完整性),以及与HTTP的区别。同时讨论了HTTPS的缺点,如性能开销、实现难度和成本问题。
摘要由CSDN通过智能技术生成

浅谈 HTTP

HTTPS 简介

HTTPS (Hypertext Transfer Protocol Secure) 是一种安全的通信协议,以安全为目标的HTTP通道,简单讲是HTTP的安全版

HTTPS 通过在 HTTP 协议的基础上添加 SSL/TLS 来提供加密通信和身份验证,HTTPS的安全基础是 SSL/TLS。

这意味着,当使用 HTTPS 访问一个网站时,与该网站之间的所有通信都是加密的,从而保护数据免受中间人攻击和其他形式的网络攻击。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

TLS/SSL

TLS/SSL全称安全传输层协议(Transport Layer Security), 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。

TLS/SSL具有身份验证、信息加密和完整性校验的功能,主要职责就是对发起的HTTP请求的数据进行加密操作和对接收到的HTTP的内容进行解密操作。

  • SSL:
    HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

  • TLS:
    它是 SSL (Secure Sockets Layer) 的继任者,因为 SSL 在过去的几个版本中存在已知的安全漏洞,所以 SSL 3.0 之后的版本被重新命名为 TLS,并且后续的改进和发展都在 TLS 的名下进行。

在这里插入图片描述

HTTPS 的作用:

  • 建立一个信息安全通道,来保证数据传输的安全;
  • 确认网站的真实性。

HTTPS 特点

  1. 安全性:

    HTTPS在HTTP协议的基础上加入了安全层(SSL/TLS),对数据进行加密传输

    保护了数据在传输过程中的安全,防止被第三方截获和窃取(Cookie都会通过加密的方式传输)

    HTTPS连接在数据传输过程中始终保持加密状态,即使连接被截断,也不会影响数据的加密状态。

  2. 可信性:

    HTTPS需要使用CA(证书颁发机构)颁发的证书来进行加密和解密操作,来验证服务端的身份

    客户端在与服务端建立连接时会验证证书的真实性和合法性,确保通信双方的身份可信(防止了中间人攻击)

    使用HTTPS协议可以提升用户对网站的信任度

  3. 完整性:

    HTTPS 使用加密哈希算法来验证数据的完整性,一旦数据在传输过程中被篡改,接收方就会发现数据的完整性校验失败,从而拒绝接收被篡改的数据。

  4. 搜索引擎优化:

    搜索引擎如 Google 已经将网站是否使用 HTTPS 作为搜索排名的一个因素,使用 HTTPS 可以提高网站在搜索结果中的排名。


HTTPS 缺点

  • 性能开销

    HTTPS协议需要在服务器和客户端之间建立加密连接,相对于HTTP协议需要进行更多的握手和加密解密操作,这可能会增加网络延迟和服务器负载。

  • 实现难度

    HTTPS协议涉及到加密算法和证书管理等复杂技术,实现难度较大,需要专业的技术支持和维护。

  • 兼容性问题

    虽然大多数现代浏览器都支持HTTPS协议,但仍有一些较旧的浏览器或设备可能无法很好地支持HTTPS协议,导致页面无法正常加载或出现安全警告。

  • 成本问题

    使用HTTPS协议需要购买SSL证书等额外的成本,对于一些小型网站或个人网站来说可能是一个负担。此外,连接服务器会占用较高的资源,增加带宽和服务器投入成本。


与 HTTP 的区别

HTTP 与 HTTPS

特性/区别HTTPHTTPS
安全性明文传输,数据可见,不安全使用SSL/TLS加密,数据安全
连接方式无加密连接加密连接,使用SSL/TLS协议
端口号默认80默认443
证书管理不需要证书需要CA颁发的SSL证书
连接状态传输过程中可能被窃取或篡改传输过程中始终保持加密状态
资源消耗较少,无需加密解密较多,需要进行加密解密操作
费用无额外费用需要购买和配置SSL证书的费用
兼容性广泛兼容可能与某些软件或设备存在兼容性问题
浏览器地址展示无安全锁标志有绿色安全锁标志
搜索引擎优化(SEO)可能排名较低(取决于搜索引擎)可能排名较高(取决于搜索引擎)

HTTPS 工作流程

1. 服务端生成密钥对

在HTTPS通信中,服务端首先生成一对密钥:私钥和公钥

  • 私钥:

    私钥是密钥对所有者(服务端)持有的,必须严格保密,不可公布给任何人。

    私钥用于解密由公钥加密的数据,以及用于对需要传输的文本的摘要进行加密,生成签名。

  • 公钥:

    公钥是密钥对持有者(服务端)公布给他人的,用于给数据加密。

    公钥加密的数据只能使用对应的私钥进行解密。

    在签名验证过程中,接收方会使用公钥对签名进行解密,获取文本的摘要,然后与自己计算得到的摘要进行对比,以验证数据的完整性和发送者的身份。

私钥可以看成钥匙,只能自己拿着,可以解开对应的锁头

公钥可以看成锁头,给别人加密重要数据的,只有对应的钥匙才能打开

.

2. 服务端申请数字证书

采用HTTPS协议的服务端必须要有一套数字证书,可以向证书颁发机构CA提出购买申请:

常见的证书颁发机构包括Symantec、GeoTrust、Thawte等。

  1. 提交申请:

    准备申请材料 => 线上购买 => 缴纳费用

    服务端向CA提交数字证书的申请(申请包括:该实体的公钥以及相关的身份信息)

  2. 验证申请:

    证书颁发机构将对服务端的申请进行审核,验证这个申请的真实性(如:确认申请者是否真的拥有所提交的公钥)

    可能还需要服务端配合完成实名认证、域名验证等环节。

  3. 颁发证书:

    验证通过后证书颁发机构将为服务端颁发CA数字证书

    证书通常以电子文件的形式提供,服务端需要根据颁发机构的指引下载、安装和使用证书。

数字证书包含:

  1. 申请者的公钥:

    用于在HTTPS通信中加密数据,确保数据只能被具有相应私钥的服务端解密

  2. 数字签名:

    证书颁发机构会使用自己的私钥对证书的内容(包括申请者的公钥和一些其他信息)进行加密,生成一个数字签名(哈希值)

    这个签名是证书颁发机构对证书内容的认可,确保证书没有被篡改

  3. 其他信息:

    申请者的身份信息(如域名)

    证书信息:包括证书的有效期、证书持有者的名称(域名)、证书链等信息

HTTPS的数字证书并不直接包含私钥,但它确实与私钥紧密相关。

.

3. 服务端发送数字证书

服务端收到数字证书后,当客户端发起HTTPS请求时,服务器会发送数字证书给客户端

.

4. 客户端验证数字证书

  1. 获取证书链:

    客户端收到数字证书后就会从中获取证书链

    证书链:数字证书中包含整个证书链,证书链是由一系列证书构成的链条,从服务端证书开始到中间证书,直到根证书结束。
    .

  2. 解析证书链:

    客户端解析证书链中的每个证书,获取证书的各种属性(颁发者、有效期、域名等)
    .

  3. 检查证书域名:

    在解析证书链后,客户端会检查证书中的域名是否与请求的域名一致

    这是为了防止“中间人攻击(MITM)”,即攻击者拦截并篡改通信内容,或者冒充服务端与客户端进行通信,确保客户端与预期的服务端进行通信。
    .

  4. 验证证书的有效性:

    在确认域名匹配后,客户端会验证证书的有效性(是否已过期、被吊销)

    • 检查证书是否在有效期内(即证书的开始时间和结束时间)
    • 检查证书是否已被吊销(通过证书吊销列表CRL或在线证书状态协议OCSP)。
      .
  5. 验证证书链:

    接下来,客户端会验证证书链的完整性(使用公钥来验证证书的数字签名)

    客户端会按照顺序验证证书链中的每个证书,从服务端证书开始,使用颁发者的公钥来验证证书的数字签名,并重复此过程,直到到达受信任的根证书。

    如果任何一个证书的签名验证失败,那么整个证书链将被视为无效,客户端将不会信任服务端证书,从而阻止与服务端的安全通信。

    以确保证书是由受信任的证书颁发机构签发的,并且整个信任链是完整和未被篡改的。
    .

  6. 验证根证书:

    最后,客户端会验证服务端证书的合法性(客户端在预置的信任机构列表中查找根证书,找到即合法)

    • 根证书在列表中:那么客户端就会信任这个根证书,并认为整个证书链是有效的。
    • 根证书不在列表中:那么证书链将被视为无效。

.

5. 客户端解析证书内容

数字证书被验证为有效后,客户端开始解析数字证书中的内容

数字证书中包含了许多关于服务端的信息:如服务端的公钥、证书的有效期、颁发者信息等。

.

6. 客户端传送加密信息

当客户端解析数字证书后,就会向服务端传送加密信息

这个过程通常包括以下几个步骤:

  1. 生成会话密钥:

    客户端会生成一个随机的会话密钥(通常是一个对称密钥)

    这个密钥将用于后续的加密和解密操作

  2. 加密会话密钥:

    客户端使用服务端证书中的公钥对生成的会话密钥进行加密

    这就像使用一个锁(公钥)将密钥(会话密钥)锁住,只有持有相应钥匙(私钥)的人才能打开这个锁

  3. 传送加密信息:

    客户端将加密后的会话密钥(以及可能的其他加密参数或信息)通过HTTPS连接发送给服务端

    这个过程中,由于会话密钥已经被服务端的公钥加密,因此即使数据在传输过程中被截获,攻击者也无法直接获取到会话密钥的内容

.

7. 服务端解密信息

当服务端接收到客户端发送的加密信息后,服务端使用自己的私钥来解密会话密钥

这就像服务端使用自己的钥匙打开了客户端锁上的锁,从而获取到了会话密钥。

这样,双方就都拥有了相同的会话密钥,而第三方无法知道这个密钥。

.

8. 双方协商生成会话密钥并交换

上面的 客户端传送加密信息服务端解密信息 就是 双方协商生成会话密钥并交换 的过程

以上过程的加密方式称为非对称加密

.

9. 使用会话密钥进行通信

一旦会话密钥被成功协商和交换,服务端和客户端双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了

具体来说:

  • 客户端会使用会话密钥来加密其发送给服务端的HTTP请求,而服务端则使用相同的会话密钥来解密这些请求。

  • 服务端也会使用会话密钥来加密其发送给客户端的HTTP响应,而客户端则使用相同的会话密钥来解密这些响应。

这种加密方式通常被称为对称加密,因为它使用同一个密钥(会话密钥)来进行加密和解密操作。

确保了通信过程中数据的安全性和机密性。因为只有拥有会话密钥的双方才能对消息进行正确的加密和解密,而第三方无法知道这个密钥,因此无法窃取或篡改通信内容。


总结⚡️

申请数字证书

  1. 服务端首先生成一对密钥:私钥和公钥
  2. 服务端向证书颁发机构提交数字证书的申请(申请包括:该实体的公钥以及相关的身份信息)
  3. 证书颁发机构验证申请的真实性(如:确认申请者是否真的拥有所提交的公钥)
  4. 验证通过后证书颁发机构将为服务端颁发CA数字证书

验证数字证书

  1. 客户端发起HTTPS请求后,服务器会发送其数字证书给客户端
  2. 客户端收到数字证书后就会从中获取证书链
  3. 客户端解析证书链中的每个证书,获取证书的各种属性(颁发者、有效期、域名等)
  4. 客户端检查证书中的域名是否与请求的域名一致
  5. 客户端验证证书的有效性(是否已过期、被吊销)
  6. 客户端验证证书链的完整性(使用公钥来验证证书的数字签名)
  7. 客户端验证服务器证书的合法性(在预置的信任机构列表中查找根证书,找到即合法)

生成会话密钥

  1. 客户端解析数字证书中的内容(得到服务器的公钥、证书的有效期等)
  2. 客户端会生成一个随机的会话密钥
  3. 客户端使用服务器证书中的公钥对生成的会话密钥进行加密
  4. 客户端将加密后的会话密钥发送给服务器
  5. 服务端用自己的私钥来解密加密后的会话密钥,从而得到会话密钥的明文
  6. 至此,服务端和客户端双方协商生产会话密钥并交换,以上过程为非对称加密

用会话密钥来加密和解密后续的请求

  1. 一旦客户端和服务器都拥有了相同的会话密钥(通过非对称加密安全地交换),它们双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了,这个过程为对称加密

对称加密的特点是只有一个密钥(即会话密钥),用于加密和解密通信中的所有数据。这使得通信过程中的数据加密和解密速度更快,因为不需要像非对称加密那样进行复杂的数学运算。

通过非对称加密来安全地交换会话密钥
通过对称加密来进行后续的加密会话中传输实际数据

这种结合使用非对称加密和对称加密的方式,既保证了通信的安全性,又提高了加密和解密的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫老板的豆

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值