计算机网络基础知识(七)—— 什么是HTTPS协议?你听我“瞎掰”

文章目录

  • 01 | 工作原理
  • 02 | SSL/TLS协议
    • 2.1 | 握手协议
    • 2.2 | 更换密码协议(Change Cipher Spec Protocol)
    • 2.3 | 警告协议(Alert Protocol)
    • 2.4 | 应用数据协议(Application Data Protocol)
  • 03 | 加密算法
    • 3.1 | 对称加密算法
    • 3.2 | 非对称加密算法
  • 04 | 总结

HTTPS是一种基于TLS/SSL协议的安全传输协议,用于保障网络通信过程中的机密性、完整性、身份认证和不可否认性。
在HTTP通信中,数据包裹在报文中明文传输,安全性较低。而HTTPS使用了TLS/SSL协议对通信过程进行加密和认证,从而提高通信的安全性。
HTTPS是一种安全的网络传输协议,可以确保通信过程中的数据安全和可信。它广泛应用于电子商务、网上银行等需要保密性的场景,成为了互联网上的重要保障手段。

01 | 工作原理

在这里插入图片描述

HTTPS的工作原理涉及到握手协议、数字证书验证、加密解密等多个方面,下面先了解一下HTTPS的工作原理

当客户端和服务器建立HTTPS连接时,会执行以下流程:

在这里插入图片描述

当客户端(如浏览器)和服务器之间建立HTTPS连接时,会在传输层(Transport Layer)之上创建一个安全通道,该通道包括以下四个基本步骤:

在这里插入图片描述

  1. 客户端发起SSL/TLS连接请求:客户端向服务器发起连接请求,告诉服务器想要建立一个SSL/TLS加密通道;

  2. 服务器响应SSL/TLS连接请求:服务器收到客户端的请求后,回复自己的身份信息和公钥等证书。客户端验证服务器的身份,若验证通过则接受服务器提供的公钥;

  3. 客户端向服务器发送加密数据:客户端使用服务器提供的公钥对需要传输的数据进行加密,并将加密后的数据传输给服务器;

  4. 服务器解密并响应客户端请求:服务器使用自己的私钥对客户端发送的加密数据进行解密,并对客户端的请求做出相应的响应;

02 | SSL/TLS协议

在这里插入图片描述

TLS/SSL协议(Transport Layer Security/Secure Socket Layer)是实现HTTPS加密通信的核心技术,需要深入学习TLS/SSL协议中包括握手协议、证书验证等在内的各个部分,掌握其基本原理和实现方法。

SSL/TLS协议主要包括以下几个部分:

  1. 握手协议:客户端和服务器之间通过通信的方式协商加密算法、确定对称密钥等;

  2. 更改密码协议:客户端和服务器之间通过通信的方式确认切换到加密传输模式;

  3. 警告协议:用于在发生协议运行错误时通知对方;

  4. 应用数据协议:基于已经协商完成加密设置的通道上进行的应用数据传输

其中,握手协议是SSL/TLS协议中最重要的部分之一。在握手协议中,客户端和服务器首先会协商加密算法,包括非对称加密算法和对称加密算法,并确定使用哪些算法进行加密传输。接下来,客户端和服务器会采用非对称加密算法来交换密钥,并由双方生成会话密钥用于对称加密算法的加解密操作

2.1 | 握手协议

在这里插入图片描述

SSL握手协议分为四个部分:客户端hello、服务器hello、证书和密钥协商。流程如下:

  • 客户端hello:客户端向服务器发出请求,并发送包括支持的加密算法、随机数生成器以及其他信息的“hello”消息。

  • 服务器hello:服务器向客户端回复,并发送包括支持的加密算法、随机数生成器以及其他信息的“hello”消息。

  • 证书验证:服务器返回它的数字证书,这个数字证书通常是由一个受信任的第三方数字证书颁发机构(CA)签发的。客户端使用预装的根证书或中间证书验证证书的合法性,确保连接到的是真实的服务器。证书验证通过后,客户端可以获取服务器的公钥。

  • 密钥协商:客户端使用服务器公钥加密一个随机值,称之为会话密钥,用于加密通信。服务器使用自己的私钥解密该随机值,获得客户端会话密钥。

2.2 | 更换密码协议(Change Cipher Spec Protocol)

在这里插入图片描述

用于确保在通信过程中任何恶意用户不能破译密码并窃取另一方使用密钥加密的后续数据。更换密码协议主要包括以下步骤:

  1. 客户端向服务器发送更换服务端加密密码规范记录。

  2. 服务器确认收到更改密码规范记录,并发送更改客户端加密密码规范记录。

  3. 客户端确认收到更改密码规范记录。

当上述操作完成之后,客户端和服务器即使用新的加密规范来加密和传输数据,从而确保了通信过程中数据的安全性和完整性。

更改密码协议并不是一个独立的协议,而是作为SSL/TLS协议的一个子协议在握手协议中进行的。更改密码协议可以确保任何已经拦截通信的第三方无法破解密码,并使用旧有的秘密密钥来进行解密等操作。

需要注意的是,更改密码协议并不影响对称加密算法的选取和会话密钥的生成,只是在通信过程中更新了对称加密算法所使用的密钥。更改密码协议的重要性在于能够确保SSL/TLS协议在通信过程中及时调整加密模式和密钥,从而提升通信过程的安全性和可靠性

2.3 | 警告协议(Alert Protocol)

在这里插入图片描述

用于在通信过程中传输各种警告信息,以提醒双方注意可能存在的安全问题或者协议运行错误等情况。警告协议主要包括以下两种类型的警告信息:

  1. 警告级别(Alert Level):警告级别分为致命警告和警告两种类型。致命警告用于提示严重的安全问题(例如证书验证失败),这种警告可能导致通信终止。而警告则表示一些非严重问题(例如扩展情况下的未知功能码)。

  2. 警告描述(Alert Description):对于每一种警告级别,SSL/TLS协议规定了一组警告描述信息,包括如下内容:

    • 消息认证码(MAC)故障

    • 解密故障

    • 认证失败

    • 等等

在使用SSL/TLS协议进行通信时,任何一个参与方都可能向另一方发送警告信息,以更好地保证数据的安全性和完整性。例如,在客户端和服务器之间建立SSL/TLS连接的过程中,如果服务器收到的客户端请求中包含有错误的证书或者无法验证的数字签名等问题,就可以通过警告协议向客户端发送相应的警告信息,以便客户端能够及时做出相应的响应和处理。

2.4 | 应用数据协议(Application Data Protocol)

在这里插入图片描述

是在握手协议和警告协议之后的最后一步协议。应用数据协议主要用于实际传输数据,包括SSL/TLS连接的加密数据和未加密数据

在SSL/TLS协议中,应用数据协议使用对称加密算法来对数据进行加密,输入的密钥是通过握手协议中的密钥交换协议生成的。对称加密算法可以提供高效的加密和解密速度,并且对于大多数应用场景来说,其安全性已经足够强大。而且,应用数据协议可以支持多种加密算法,如AES、DES、3DES等等,以满足不同安全需求。

因为应用数据协议是建立在握手协议和警告协议上的,所以在应用数据协议传输数据之前,需要确保握手协议已经正确执行,并且确保密钥协商完成。如果密钥协商过程出现问题,比如证书验证失败,将导致无法建立SSL/TLS连接,从而无法使用应用数据协议传输数据。

另外,应用数据协议还能够支持压缩数据,以便更有效地传输。同时,在传输数据时,SSL/TLS协议还支持分段传输,以及并发处理数据(即同时传输多条数据)等高级功能。这些功能能够进一步增强SSL/TLS协议的安全性和效率,适用于通信过程中各种应用场景。

03 | 加密算法

HTTPS使用了多种加密算法来保证数据传输的安全性,如对称加密算法、非对称加密算法、哈希算法等,需要熟悉这些加密算法的基本原理和使用方法。

在这里插入图片描述

数字证书是一种电子文件,其中包含与网站相关的证书信息,例如网站的名称、公钥等。数字证书可以由权威机构颁发,用于识别和验证网站的身份。当客户端连接到一个HTTPS网站时,服务器会返回其数字证书给客户端,以此来证明自己身份的真实性。客户端会使用预装的根证书或中间证书验证证书的合法性,确保连接到的是真实的服务器。

3.1 | 对称加密算法

在这里插入图片描述

是一种使用同样的密钥来进行加密和解密的加密算法,也被称为共享秘密加密。在对称加密算法中,发送方使用密钥对明文进行加密得到密文,接收方收到密文后再使用同样的密钥对密文进行解密得到明文。

对称加密算法具有速度快、效率高和安全性平衡(因为如果坏人拿到这份共同的密钥,安全性就几乎荡然无存了)等特点,因此广泛应用于网络通信、数据传输、文件加密等领域。常见的对称加密算法有AES、DES、3DES等。

在对称加密算法中,密钥是关键。密钥长度越长,破解难度越大,但也会相应地带来更高的加解密成本。同时,密钥的管理和分配也是一个重要的问题,需要确保密钥的安全性,不能被恶意攻击者获取。

对于对称加密算法,还有一个重要的问题就是密钥交换。在通信双方建立连接之前,需要协商出一个共享的密钥并确保密钥的安全性。在对称密钥交换中,有以下两种常见的方法:

  1. 预共享密钥:预共享密钥是指在通信双方建立连接之前,通过其他渠道将密钥交给对方。这种方法相对安全,但密钥分配较为繁琐。

  2. 密钥交换协议:密钥交换协议是一种在通信双方建立连接过程中协商密钥的方法,常见的密钥交换协议有Diffie-Hellman、RSA等。

总之,对称加密算法是一种高效、快速、安全的加密算法,在各种应用领域都得到了广泛的应用。通过选择合适的密钥长度和密钥交换方法,可以保证通信数据的机密性和安全性。

3.2 | 非对称加密算法

在这里插入图片描述

也称为公钥加密算法,是一种使用不同的密钥来进行加密和解密的加密算法。在非对称加密算法中,每个参与者都有一对密钥:公钥和私钥。公钥可以公开,而私钥必须保密。发送方用接收方的公钥对明文进行加密得到密文,接收方用自己的私钥对密文进行解密得到明文

非对称加密算法具有密钥管理与分发和验证身份等优点,广泛应用于数字签名、密钥交换协议、数字证书等领域。常见的非对称加密算法有RSA、DSA、ECC等。

在非对称加密算法中,公钥可以公开,但私钥必须保密;因此,在数学上设计一个安全的非对称加密算法是非常困难的。虽然公钥加密能够有效地达到“加密速度慢、加密强度高”的效果,但它的加密复杂度是对称加密算法的成千上万倍,不适用于大规模数据的加密。

在非对称加密算法中,还有一个重要的问题就是密钥交换。在通信双方建立连接之前,需要通过一些方法将公钥传输给对方。常见的方法有通过密钥交换协议(如Diffie-Hellman)虽然不公开私钥,但可以让通信双方共同协商出一个对称密钥,从而避免中间人攻击。

总之,非对称加密算法是一种安全、可靠、实用的加密算法。它具有密钥管理与分发和身份验证等优点,但也存在着加密速度慢、加解密效率低、密钥交换等缺陷。需要按照实际需求合理选择加密算法与密钥长度,并结合对称加密算法等加密技术,从而达到更好的保护通信安全的效果。

04 | 总结

在这里插入图片描述

总结一下,HTTPS具体的步骤如下:

  1. 客户端向服务器请求SSL连接,此时客户端发送一个“Client Hello”消息,其中包括了:

    • 支持的SSL或TLS协议版本号

    • 生成的随机数

    • 支持的加密算法列表

  2. 服务器收到“Client Hello”消息后,向客户端发送一个“Server Hello”消息,其中包括了:

    • 确认协议版本号

    • 生成的随机数

    • 选择的加密算法

    同时,服务器还会向客户端发送其公钥和证书。

  3. 客户端对服务器返回的证书进行验证,包括以下步骤:

    • 检查证书是否过期

    • 检查证书是否在可信的证书颁发机构(CA)列表中

    • 验证证书中的数字签名是否正确

    如果证书验证通过,则客户端使用服务器发送的公钥来加密一个随机值,并将其发送给服务器。

  4. 服务器使用自己的私钥来解密客户端发送的随机值,并使用该随机值生成对称密钥。服务器将该密钥发送给客户端,并且从此以后使用该密钥来加密所有的数据。

  5. 客户端收到服务器发送的密钥后,会根据之前协商过的加密算法生成一个“Finished”消息,并使用对称密钥来加密该消息,然后发送给服务器。

  6. 服务器接收到来自客户端的“Finished”消息后,也会根据之前协商过的加密算法生成一个“Finished”消息,并使用对称密钥来加密该消息,然后发送给客户端。

  7. 安全通道建立完成后,双方可以开始进行加密通信了,客户端和服务器使用对称密钥来加密所有的数据,从而保证传输的安全性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

南大通用数据库-Gbase-8a-报错集锦-02-metadata is incomplete on localhost

一、版本信息 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2Gbase8a版本8.6.2-R43 二、问题原因 由于gbase.table_distribution存储了所有引擎为express的表元数据信息,如果此表出现数据损坏&a…

【五】设计模式~~~创建型模式~~~单例模式(Java)

【学习难度:★☆☆☆☆,使用频率:★★★★☆】 5.1. 模式动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一…

Hystrix 服务熔断

书籍,人,借阅服务之间相互调用, 高度耦合, 一旦一个服务故障, 其他服务会雪崩, 和多米诺骨牌一样 Hystrix 熔断器, 保险丝 服务降级 提供补救措施发给请求者, 服务可用, 能力下降了 borrow-service 导入依赖 <dependency><groupId>org.springframework.cloud&l…

【MySQL新手到通关】第六章 时间日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…

使用Chat gpt提高Android开发效率

简介 在过去几周里&#xff0c;我进行了一项令人大开眼界的实验&#xff0c;将 Chat-GPT&#xff08;我使用的是 Bing Chat&#xff0c;它在后台使用了 GPT-4&#xff0c;并且可以免费使用&#xff09;融入到我的日常 Android 开发工作流程中&#xff0c;以探索它是否能够提高…

DAY04_JDBC快速入门JDBC API详解SQL防注入数据库连接池JDBC综合练习

目录 1 JDBC1.1 JDBC概念1.2 JDBC本质 1.3 JDBC好处 2 JDBC快速入门2.1 编写代码步骤2.2 具体操作 3 JDBC API详解3.1 DriverManager3.2 Connection3.2.1 获取执行对象3.2.2 事务管理 3.3 Statement3.4 ResultSet3.4.1 ResultSet案例 3.5 PreparedStatement3.5.1 SQL注入3.5.2 …

hutool文件导出

hutool文件导出 需求&#xff1a;管理员设置会议&#xff0c;参加会议会根据管理员设置的会议要求&#xff0c;用户参加会议填写相关数据&#xff0c;并且生成一个动态的excel数据并导出 示例&#xff1a; 每场都可以自定义报名字段 根据需求与前端约定 字段名称&#xff08;n…

Koa学习1:初始化项目

前言 作为前端开发者&#xff0c;最适合我们的后端就是node了&#xff0c;node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是&#xff1a;【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章&#xff0…

javascript基础九:说说Javascript中的继承?如何实现继承?

一、是什么 继承&#xff08;inheritance&#xff09;是面向对象软件技术当中的一个概念 如果一个类别B“继承自”另一个类别A&#xff0c;就把这个B称为“A的子类”&#xff0c;而把A称为“B的父类别”也可以称“A是B的超类” 继承的优点 继承可以使得子类具有父类别的各种属性…

Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

【企业化架构部署】Apache网页优化

文章目录 一、Apache网页优化概述1.优化内容2.网页压缩2.1gzip概述2.2作用2.3Apache的压缩模块概述mod_gzip模块与mod_deflate模块 3.配置网页压缩功能3.1启用网页压缩功能步骤3.2具体操作步骤 4.配置网页缓存功能4.1启用网页压缩功能步骤4.2具体操作步骤 二、Apache安全优化1.…

设计模式之~工厂系列(简单工厂、工厂方法、抽象工厂)

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式&#xff1a; 拓展&#xff1a; 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点&#xff1a;简单工厂模式的最大优点在于工厂类包含…

计算机专业主要学习什么

2020计算机专业主要学习什么 1计算机专业都学习哪些方面的知识 1、可视化编程 掌握编程方法和可视化技术&#xff0c;熟悉一个可视化平台及其软件开发技术。能够获取Delphi编程人员系列&#xff0c;Java Basic或VB开发专家认证。 就业方向&#xff1a;企业&#xff0c;政府&…

vue前端分页功能怎么实现

Vue前端分页功能可以通过以下几个步骤实现&#xff1a; 1. 安装分页组件库&#xff08;如vue-pagination-2&#xff09;&#xff1a; bash npm install vue-pagination-2 2. 在Vue项目中引入并注册分页组件&#xff1a; javascript import Vue from vue; import Pagination fr…

传地址给组件并让该组件用到地址在背景图片中的方法

问题 这是我在开发中遇到的问题。在网站的分页面中&#xff0c;背景图片的格式几乎一模一样。只是上面的文字和图片不一样而已。 所以我希望写一个组件&#xff0c;然后页面只需要传入背景图片地址和标题就可以显示出相关内容。 于是我动手写了&#xff0c;大致思路是一个盒…

判断点在多边形内算法的C++实现

本篇博客介绍了使用射线法判断点在多边形内部还是外部的算法&#xff0c;并通过C做了具体实现 1. 算法思路 判断平面内点是否在多边形内有多种算法&#xff0c;其中射线法是其中比较好理解的一种&#xff0c;而且能够支持凹多边形的情况。该算法的思路很简单&#xff0c;就是…

AMEYA360:纳芯微推出车规级耐高压、三线霍尔开关及锁存器NSM101x系列

纳芯微推出全新三线制车规霍尔效应开关/锁存器NSM101x系列&#xff0c;为数字位置检测提供高精度的解决方案&#xff0c;可被广泛应用于汽车执行器等的位置检测。 NSM101x产品系列包含了3个产品型号&#xff0c;即NSM1011(单极霍尔开关)、NSM1012(全极霍尔开关)、NSM1013(霍尔锁…

【Unity】Playable使用细则

【Unity】Playable使用细则 本文基于Unity 2021.3 API。 本文介绍官方文档中没提及的Playable使用限制、注意事项、Bug及规避方案&#xff0c;不是Playable的入门教程&#xff01; 如果你还不熟悉Playable的基础用法&#xff0c;请先学习以下官方文档和示例&#xff1a; Playa…

基于STM32的定时器--定时中断(HAL库)

基于STM32的定时器--定时中断&#xff08;HAL库&#xff09; 介绍引言定时器介绍 实例项目介绍准备设计流程 介绍 引言 本文旨在介绍如何使用STM32CubeMX配置KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器介绍 定时器是STM32微…

chatgpt赋能python:Python升降序排列数字

Python升降序排列数字 在Python编程中&#xff0c;排序是一个非常常见并且重要的操作。Python提供了多种排序算法以满足不同的需求。 排序算法 Python中内置的排序算法有两种&#xff1a;Timsort和Quicksort。其中Timsort是一种混合排序算法&#xff0c;结合了插入排序和归并…