HTTPS SSL/TLS 工作流程

目录

      • 一、HTTP/HTTPS 简介
        • 1、HTTP协议相关内容
        • 2、HTTPS协议
        • 3、HTTP版本差异:
      • 二、HTTPS 协议工作流程解析
        • 1. 客户端请求 SSL 握手
        • 2. 服务端接收 SSL 握手连接
        • 3. TLS 握手中的密钥协商
        • 4. HTTP 数据的加密与解密
        • 5. 安全性保障
      • 三、HTTPS 协议的相关知识拓展
        • 1. TLS 与 SSL 的区别
        • 2. HTTPS 的性能优化
        • 3. HTTPS 的安全性
      • 四、深入学习 HTTPS 和网络安全的书籍与资源
        • 推荐书籍
        • 推荐博客
      • 五、配置 HTTPS 的实践建议
        • 1. 使用 Let’s Encrypt 免费证书
        • 2. 强制 HTTPS
        • 3. 启用 HTTP/2
      • 六、进一步学习建议

一、HTTP/HTTPS 简介

HTTP(超文本传输协议)是用于传输超媒体文档(如 HTML)的应用层协议,是互联网上应用最为广泛的一种网络协议。
在这里插入图片描述

1、HTTP协议相关内容
  • URL结构http://host[":"port][abs_path],其中host是主机名,port是端口(默认端口80),abs_path是绝对路径。例如http://www.example.com:8080/index.html,这里www.example.com是主机名,8080是端口(非默认),/index.html是绝对路径。
  • 请求:包含请求行、消息报头、请求正文。
    • 请求行:如GET /index.html HTTP/1.1\r\n\r\nGET是方法(表示请求资源),/index.html是请求的URI(统一资源标识符),HTTP/1.1是HTTP版本,\r\n\r\n是回车换行符,用于分隔请求行和消息报头。
    • 消息报头:包含各种请求相关的信息,如User-Agent(用户代理,标识客户端信息)、Accept(可接受的内容类型)等。
    • 请求正文:一般在POST等请求方法中携带数据,如表单提交的数据等。
  • 响应:由状态行、消息报头、响应正文组成。
    • 状态行:如HTTP/1.1 200 OK\r\nHTTP/1.1是版本,200是状态码(表示成功),OK是状态描述。常见状态码还有404(未找到资源)、500(服务器内部错误)等。
    • 消息报头:例如Server: XHttpd\r\n(服务器软件信息)、Content-Type: text/html\r\n(响应内容类型)、Content-Length: 128\r\n\r\n(响应内容长度)等。
    • 响应正文:实际返回的数据,如网页的HTML代码等。
2、HTTPS协议
  • HTTPS是HTTP的安全版本,在HTTP的基础上通过SSL/TLS协议进行加密传输,默认端口是443。它可以保证数据传输的安全性和完整性,防止数据被窃取、篡改等。例如在进行网上银行交易、登录重要账号等场景中,通常使用HTTPS协议来确保信息安全。
3、HTTP版本差异:
  • HTTP 1.0:默认使用短连接,即每次请求都要建立一次TCP连接,请求结束后关闭连接,效率较低。
  • HTTP 1.1:默认使用长连接,在一定时间内保持TCP连接不断开,多个请求可以复用同一个连接,提高了传输效率。

二、HTTPS 协议工作流程解析

在这里插入图片描述

我们先通过流程图对 HTTPS 的工作机制做逐步讲解:

1. 客户端请求 SSL 握手

当用户访问一个 HTTPS 网站时,客户端(如浏览器)会发起 SSL/TLS 握手请求。这是 HTTPS 工作的第一步,其目的是协商安全通信所需的协议版本、加密算法和会话密钥。

  • 关键点
    • 客户端会发送支持的协议版本(如 TLS 1.2 或 TLS 1.3)和加密套件列表。
    • 提供一个随机数(Client Random)以参与后续的密钥生成。
2. 服务端接收 SSL 握手连接

服务端响应握手请求,返回以下信息:

  • 服务端随机数:Server Random,与客户端随机数一起用于密钥生成。
  • 数字证书:由可信 CA 签发,包含服务端的公钥,用于验证服务端身份。
  • 选定的加密算法:从客户端提供的加密套件中选择。

如果客户端验证数字证书失败(例如伪造网站证书或 CA 不可信),通信会终止。

3. TLS 握手中的密钥协商
  • 客户端生成会话密钥:客户端生成一个 Pre-Master Secret,用服务端公钥加密后发送给服务端。
  • 服务端解密 Pre-Master Secret:服务端使用私钥解密得到 Pre-Master Secret。
  • 对称密钥生成:客户端和服务端通过 Client Random、Server Random 和 Pre-Master Secret 派生出相同的对称加密密钥,用于后续的加密通信。
4. HTTP 数据的加密与解密
  • 握手完成后,双方基于协商的对称密钥加密传输数据。
  • 客户端:将 HTTP 请求(包括请求头和数据)加密为 TLS 记录数据。
  • 服务端:接收加密的 TLS 数据,解密后提取 HTTP 请求内容并处理。
  • 服务端响应:生成 HTTP 响应(例如网页 HTML 或 JSON 数据),加密后通过 TLS 通道返回客户端。
  • 客户端解密:解析 TLS 记录数据,提取 HTTP 响应内容并呈现给用户。
5. 安全性保障

HTTPS 的核心优势在于:

  • 保密性:防止数据被窃听。
  • 完整性:防止数据被篡改。
  • 认证性:验证通信双方的身份。

三、HTTPS 协议的相关知识拓展

1. TLS 与 SSL 的区别
  • SSL(Secure Sockets Layer):由网景公司开发的早期版本(1.0-3.0)。
  • TLS(Transport Layer Security):SSL 的后续版本,主要包括 TLS 1.0、1.2 和最新的 TLS 1.3。
  • TLS 1.3 特性
    • 简化握手流程,提升性能。
    • 移除了一些不安全的算法(如 RSA 密钥交换)。
2. HTTPS 的性能优化

尽管 HTTPS 增加了握手和加密的计算开销,但现代优化技术(如 TLS Session Resumption 和 HTTP/2)使得其性能接近 HTTP:

  • TLS Session Resumption:允许复用之前的会话密钥,避免重新握手。
  • HTTP/2:多路复用、头部压缩等特性提升了 HTTPS 的性能。
3. HTTPS 的安全性

尽管 HTTPS 非常安全,但仍需注意:

  • 中间人攻击(MITM):通过伪造证书拦截通信。
  • 证书信任链问题:不可信的 CA 可能签发伪造证书。
  • 证书吊销与 OCSP:浏览器需要验证证书是否被吊销,提升安全性。

四、深入学习 HTTPS 和网络安全的书籍与资源

推荐书籍
  1. 《HTTP权威指南》(HTTP: The Definitive Guide)
    • 一本深入讲解 HTTP 协议的经典著作,适合理解 HTTPS 的基础原理。
  2. 《SSL和TLS协议详解》(SSL and TLS: Designing and Building Secure Systems)
    • 深入讲解 SSL/TLS 协议的握手流程、加密算法和实现细节。
  3. 《计算机网络:自顶向下方法》(Computer Networking: A Top-Down Approach)
    • 一本综合性的网络书籍,涵盖 HTTPS、TLS 和加密协议等内容。
  4. 《Kali Linux 网络安全渗透测试》
    • 偏向实战,适合了解 HTTPS 安全漏洞的实际检测。
推荐博客
  1. Cloudflare Blog
    • 高质量的网络技术博客,涵盖 HTTPS、TLS 1.3 等最新发展。
  2. Mozilla Developer Network (MDN)
    • MDN 是学习 HTTP 和 HTTPS 的权威资源,内容详尽且直观。
  3. Let’s Encrypt
    • 聚焦于免费证书的颁发,帮助开发者快速配置 HTTPS。
  4. OWASP HTTPS Security Cheat Sheet
    • 关于 HTTPS 实践的安全指南,适合开发者快速了解配置要点。

五、配置 HTTPS 的实践建议

1. 使用 Let’s Encrypt 免费证书
  • 快速生成 HTTPS 证书并配置到服务器:
    sudo certbot --nginx
    
2. 强制 HTTPS
  • 配置 Web 服务器(如 Nginx)重定向 HTTP 到 HTTPS:
    server {listen 80;server_name example.com;return 301 https://$host$request_uri;
    }
    
3. 启用 HTTP/2
  • 在 Nginx 中启用 HTTP/2:
    server {listen 443 ssl http2;...
    }
    

六、进一步学习建议

  • 深入研究 TLS 1.3 的性能优化。
  • 实战配置 HTTPS,避免常见的安全漏洞。
  • 关注新型的安全协议(如 QUIC 和 HTTP/3)的发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/442.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu中使用miniconda安装R和R包devtools

安装devtools环境包 sudo apt-get install gfortran -y sudo apt-get install build-essential -y sudo apt-get install libxt-dev -y sudo apt-get install libcurl4-openssl-dev -y sudo apt-get install libxml2.6-dev -y sudo apt-get install libssl-dev -y sudo apt-g…

解决SpringBoot无法使用JDK8问题

解决SpringBoot无法使用JDK8问题 现状解决方案 现状 使用idea创建springboot项目无法选择java8。原因是23年11月的spring更新后就明确了不在支持java8版本的项目创建,但是目前为止很多公司开发还在用java8,导致会有问题的产生。 解决方案 使用idea创…

八、系统托盘与配置面板

没有人会把你变得越来越好,时间和经历只是陪衬。 支撑你变得越来越好的,是你自己坚强的意志、修养、品行、以及不断的反思和经验。 人生最好的贵人,就是努力向上的自己。 一、系统托盘 1、资源文件夹 新建资源文件夹,我们需要把…

IntelliJ IDEA中Maven项目的配置、创建与导入全攻略

大家好,我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE(集成开发环境)之一,也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能,通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…

Element-plus、Element-ui之Tree 树形控件回显Bug问题。

需求&#xff1a;提交时&#xff0c;需要把选中状态和半选中状态 的数据id提交。如图所示&#xff1a; 数据回显时&#xff0c;会出现代码如下&#xff1a; <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …

C语言#define定义宏

目录 一、什么是宏以及宏的声明方式 1.宏常量&#xff1a; 2.宏函数&#xff1a; 二、宏的替换原则 三、宏设计的易犯错误 ERROR1&#xff1a;尾部加分号&#xff08;当然有些特定需要加了分号&#xff0c;这里说明一般情况&#xff09; ERROR2&#xff1a;宏函数定义时&…

第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题

思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了&#xff0c;但是千篇一律&#xff0c;看了跟没看没有太大区别。 在生产中&#xff0c;我们往往会通过 DTS 工具将 binlog 导入到 Kafka&#xff0c;再通过 Kafka 消费 binlog&…

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务&#xff0c;如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信&#xff0c;接收作业并提交到执行队列&#xff0c;Gitlab-Runner从队列中获取作业&#xff0c;并允许在不同环境下进行作…

STM32第6章、WWDG

一、简介 WWDG&#xff1a;全称Window watchdog&#xff0c;即窗口看门狗&#xff0c;本质上是一个能产生系统复位信号和提前唤醒中断的计数器。 特性&#xff1a; 是一个递减计数器。 看门狗被激活后&#xff0c; 当递减计数器值从 0x40减到0x3F时会产生复位&#xff08;即T6位…

【Qt】事件、qt文件

目录 Qt事件 QEvent QMouseEvent QWheelEvent QKeyEvent QTimerEvent Qt文件 QFile QFileInfo Qt事件 在Qt中用一个对象表示一个事件&#xff0c;这些事件对象都继承自抽象类QEvent。事件和信号的目的是一样的&#xff0c;都是为了响应用户的操作。有两种产生事件的方…

Jenkins触发器--在其他项目执行后构建

前言&#xff1a; jenkins中有多种触发器可用&#xff0c;可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释&#xff1a; Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…

OpenStack 网络服务的插件架构

OpenStack 的网络服务具有灵活的插件架构&#xff0c;可支持多种不同类型的插件以满足不同的网络需求。以下是对 OpenStack 网络服务插件架构中一些常见插件类型的介绍&#xff1a; 一、SDN 插件 Neutron 与 SDN 的集成&#xff1a;在 OpenStack 网络服务里&#xff0c;SDN 插…

牛客网刷题 ——C语言初阶(6指针)——BC105 矩阵相等判定

1. 题目描述&#xff1a;BC105 矩阵相等判定 牛客网OJ题链接 描述&#xff1a; KiKi得到了两个n行m列的矩阵&#xff0c;他想知道两个矩阵是否相等&#xff0c;请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。 示例1 输入&#xff1a; 2 2 1 2 3 4 1 2 3 4 输出…

SQLAlchemy

https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里&#xff0c;我们定义模块级构造&#xff0c;这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射&#xff0c;它同时定…

[SMARTFORMS] 导出SMARTFORMS表单数据

当我们配置好了Smartforms表单以后&#xff0c;如何在自开发的ALV程序报表中以PDF格式导出表单数据到电脑本地&#xff1f; 效果图 选择需要进行导出的采购凭证编号行数据&#xff0c;点击PDF格式导出按钮&#xff0c;弹出导出数据的信息窗口&#xff0c;点击"允许"…

seo泛目录(seo泛目录程序)

导言&#xff1a; 在搜索引擎优化&#xff08;SEO&#xff09;的领域中&#xff0c;泛目录程序被广泛应用于提升网站的可见性和排名。本文将深入探讨SEO泛目录程序的概念和作用&#xff0c;重点介绍它在网站优化中的重要性和优势&#xff0c;帮助读者了解SEO泛目录程序的工作原…

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥&#xff08;Story Bridge&#xff09;位于澳大利亚布里斯班&#xff0c;建造于1940年&#xff0c;全长777米&#xff0c;横跨布里斯班河&#xff0c;可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥&#xff0c;是全世界两座手工建…

[人工智能自学] Python包学习-pandas

紧接上篇numpy的学习教程 本篇参考&#xff1a; Pandas 教程|菜鸟教程 官方教程 - 10分钟入门pandas joyful-pandas pandas中文教程 它建立在 NumPy 库的基础之上&#xff0c;提供了高效的数据结构和数据分析工具&#xff0c;使得在 Python 中进行数据操作变得更加容易和高效。…

【2024年华为OD机试】 (A卷,100分)- 二元组个数(Java JS PythonC/C++)

一、问题描述 以下是题目描述的 Markdown 格式&#xff1a; 题目描述 给定两个数组 a 和 b&#xff0c;若 a[i] b[j]&#xff0c;则称 [i, j] 为一个二元组。求在给定的两个数组中&#xff0c;二元组的个数。 输入描述 第一行输入 m&#xff0c;表示第一个数组的长度。第二…

数据结构与算法之二叉树: LeetCode 543. 二叉树的直径 (Ts版)

二叉树的直径 https://leetcode.cn/problems/diameter-of-binary-tree/description/ 描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 两节点之间路径的 长度 …