浅谈 HTTPS

文章目录

  • [HTTPS 简介](#HTTPS 简介)
  • [HTTPS 特点](#HTTPS 特点)
  • [与 HTTP 的区别](#与 HTTP 的区别)
  • [HTTPS 工作流程](#HTTPS 工作流程)
    • [1. 服务端生成密钥对](#1. 服务端生成密钥对)
    • [2. 服务端申请数字证书](#2. 服务端申请数字证书)
    • [3. 服务端发送数字证书](#3. 服务端发送数字证书)
    • [4. 客户端验证数字证书](#4. 客户端验证数字证书)
    • [5. 客户端解析证书内容](#5. 客户端解析证书内容)
    • [6. 客户端传送加密信息](#6. 客户端传送加密信息)
    • [7. 服务端解密信息](#7. 服务端解密信息)
    • [8. 双方协商生成会话密钥并交换](#8. 双方协商生成会话密钥并交换)
    • [9. 使用会话密钥进行通信](#9. 使用会话密钥进行通信)
  • 总结

浅谈 HTTP

HTTPS 简介

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

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

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

  • 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协议使用MAC(消息认证码)来确保数据的完整性。


与 HTTP 的区别

  • HTTP 是明文传输,HTTPS 通过 SSL/TLS 进行了加密

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

    而HTTP的连接是明文的,一旦被截断,数据就可能被窃取或篡改。

  • HTTP 的端口号是 80,HTTPS 是 443

  • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费

  • HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。


HTTPS 工作流程

1. 服务端生成密钥对

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

  • 私钥:

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

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

  • 公钥:

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

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

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

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

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

.

2. 服务端申请数字证书

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

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

  1. 提交申请:

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

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

  2. 验证申请:

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

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

  3. 颁发证书:

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

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

数字证书包含:

  1. 申请者的公钥:

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

  2. 数字签名:

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

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

  3. 其他信息:

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

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

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

.

3. 服务端发送数字证书

服务端收到数字证书后,会在HTTPS通信的TLS/SSL握手过程中主动向客户端发送数字证书

.

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数字证书

  5. 服务端主动向客户端发送数字证书

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

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

  8. 客户端检查证书中的域名是否与请求的域名一致

  9. 客户端验证证书的有效性(是否已过期、被吊销)

  10. 客户端验证证书链的完整性(使用公钥来验证证书的数字签名)

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

  12. 客户端解析数字证书中的内容(得到服务器的公钥、证书的有效期等)

  13. 客户端会生成一个随机的会话密钥

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

  15. 客户端将加密后的会话密钥发送给服务器

  16. 服务端使用自己的私钥来解密会话密钥

  17. 服务端和客户端双方协商生产会话密钥并交换

  18. 服务端和客户端双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了

相关推荐
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
掘根4 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全
友友马5 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
2401_872514975 小时前
深入探究HTTP网络协议栈:互联网通信的基石
网络·网络协议·http
清水白石0085 小时前
C++使用Socket编程实现一个简单的HTTP服务器
服务器·c++·http
不良人天码星7 小时前
HTTP 协议的基本格式
网络·网络协议·http
心勤则明7 小时前
Netty配置SSL证书加密
服务器·https·ssl
广东数字化转型8 小时前
SSL/TSL 总结
网络·网络协议·ssl
不烦下雨c9 小时前
【网络】传输层协议TCP
网络·网络协议·tcp/ip