当前位置:首页 > 技术分析 > 正文内容

面试官问: 从握手到加密,带你全面解析 HTTPS 过程

ruisui882个月前 (04-07)技术分析28

在前端和后端开发领域,安全问题无疑是至关重要的,而 HTTPS(HyperText Transfer Protocol Secure)则是保障数据传输安全的基石。面试中,了解 HTTPS 的详细过程不仅能展现你的技术深度,也能体现你对安全细节的关注。今天,我们就来全面解析 HTTPS 的过程,从握手到加密,一步步揭开其神秘面纱!

HTTPS 简介

HTTPS 是一种基于 HTTP 的安全通信协议,通过 SSL/TLS(Secure Socket Layer / Transport Layer Security)来加密数据,确保数据在客户端和服务器之间的传输过程中不被窃听或篡改。

HTTPS 连接过程(握手流程)

HTTPS 通信的核心在于 SSL/TLS 握手过程。下面是整个握手的详细步骤:

1. 客户端发起请求

客户端(如浏览器)向服务器发起 HTTPS 请求,这个过程中会生成一个随机数 ClientHello,包含支持的 SSL/TLS 协议版本、加密算法列表等。

ClientHello:
    Version: TLS 1.2
    Random: Random Data
    Cipher Suites: [TLS_RSA_WITH_AES_128_CBC_SHA, ...]

2. 服务器响应

服务器收到请求后,返回 ServerHello 响应,并选择 SSL/TLS 协议版本和加密算法,同时发送服务器的数字证书(包含公钥)。

ServerHello:
    Version: TLS 1.2
    Random: Random Data
    Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA
Certificate:
    Subject: www.example.com
    Public Key: 

3. 客户端验证证书

客户端使用预装的受信任的根证书列表验证服务器的数字证书。如果证书合法,继续进行下一步。

4. 生成对称密钥

客户端生成一个随机数 pre-master secret,使用服务器的公钥加密后发送给服务器。服务器使用自己的私钥解密得到该随机数。此后,客户端和服务器根据 pre-master secret 和之前的随机数 ClientHello 和 ServerHello 共同生成对称密钥。

Client Key Exchange:
    Encrypted Pre-Master Secret: 

5. 加密通信

握手过程完成后,客户端和服务器将使用对称密钥加密通信数据,并进行最后校验确认。


ChangeCipherSpec
Finished: 

实战示例代码

为了突显 HTTPS 的重要性,我们可以模拟一个简单的 HTTPS 请求。

使用 JavaScript 发送 HTTPS 请求

const https = require('https');

// 设置请求选项
const options = {
  hostname: 'www.example.com',
  port: 443,
  path: '/',
  method: 'GET'
};

// 发送 HTTPS 请求
const req = https.request(options, (res) => {
  console.log(`状态码: ${res.statusCode}`);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});

// 结束请求
req.end();

源码解析

客户端验证数字证书

客户端在握手过程中需要验证服务器的数字证书。通过 Node.js 提供的 https 模块,可以使用 ca 选项指定一个 CA(Certificate Authority)证书,用于验证服务器证书的可信度。

const https = require('https');
const fs = require('fs');

// 加载 CA 证书
const ca = fs.readFileSync('path/to/ca-cert.pem');

// 设置请求选项,使用自定义 CA
const options = {
  hostname: 'www.example.com',
  port: 443,
  path: '/',
  method: 'GET',
  ca: [ca] // 自定义 CA 证书
};

// 发送 HTTPS 请求
const req = https.request(options, (res) => {
  console.log(`状态码: ${res.statusCode}`);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});

// 结束请求
req.end();

HTTPS 各阶段的意义与安全性提升

对称加密与非对称加密

  • 非对称加密:在握手过程中公钥和私钥用于加密和解密对称密钥生成材料,使其具有足够的安全性。然而,由于非对称加密计算复杂,耗时较长,通常仅用于初始密钥交换阶段。
  • 对称加密:在建立初始连接之后,双方使用对称密钥进行快速加密通信,相比非对称加密,对称加密算法低耗时,适合数据传输阶段。

完整性校验与证书验证

  • 完整性校验:HTTPS 在数据传输过程中附带有 MAC(Message Authentication Code)或 HMAC(Hash-based Message Authentication Code),确保数据未被篡改。
  • 证书验证:通过受信任的 CA 证书链验证数字证书的真实性,从而确保服务器身份的合法性。

总结

HTTPS 协议的安全性离不开 SSL/TLS 握手过程。理解并掌握这一过程,从握手到数据加密和校验,有助于我们增强网络安全意识,设计更为安全的应用系统。熟悉 HTTPS 的工作原理和安全机制,不仅能提升面试表现,也能为实际项目提供坚实的保障。

坚持学习每一刻,安全我们共同守护!了解 HTTPS,加固你的技术高地!

坚持学习,每天进步一点点!

#头条创作挑战赛#

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3332.html

标签: readfilesync
分享给朋友:

“面试官问: 从握手到加密,带你全面解析 HTTPS 过程” 的相关文章

首个支持苹果 M1 Mac 的 Linux 发行版发布,面向用户开放下载

IT之家 3 月 20 日消息,Asahi Linux 是研究 Linux for Apple Silicon macs 的组织群体,3 月 18 日,Asahi Linux 宣布成功在 M1 MacBook Air 笔记本电脑上运行,并开放了 Asahi Linux 的下载安装。Asahi Lin...

vue项目-父页面数据变化使子页面更新的几种情况

当操作页面时候,特别是增删改操作之后,数据会有所改变,这个时候我们希望组件中的数据要和最新数据一致,就需要重新更新渲染。以下是针对几种不同情况下方式:一.子页面调用接口后重新渲染1.使用ref方式父组件中用ref=“xxx” 来声明子组件,然后通过在父组件值改变的地方来调用子组件中的方法this.$...

git的几种分支模式

编写代码,是软件开发交付过程的起点,发布上线,是开发工作完成的终点。代码分支模式贯穿了开发、集成和发布的整个过程,是工程师们最亲切的小伙伴。那如何根据自身的业务特点和团队规模来选择适合的分支模式呢?本文分享几种主流 Git 分支模式的流程及特点,并给出选择建议。分支的目的是隔离,但多一个分支也意味着...

一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,此服务比其它服务内存占用稍大。那为什么此服务内存占用稍大...

2024年,不断突破的一年

迈凯伦F1车队不久前拿下了2024年度总冠军,距离上一次还是二十几年前。在此期间,另一领域内,一个充满革新活力的腕表品牌——RICHARD MILLE理查米尔,正不断发展,与F1运动、帆船、古董车展等领域,共享着对速度与极限的无尽向往。RICHARD MILLE的发展与F1车手们在赛道上的卓越表现交...

vue中router常见的三种传参方式

目录:我们在使用vue开发的过程中使用router跳转的时候肯定会遇到传参的情况;一般情况就三种传参是最常见的;那我们就来看看都有那几种传参方式吧!第一种:{ path: '/mall:id', name: 'Mall', component:...