当前位置: 首页 > news >正文

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展,网络传输中的数据安全性受到了前所未有的关注。HTTPS,作为HTTP的安全版本,为数据在客户端和服务器之间的传输提供了加密和身份验证,从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的安全机制,包括SSL/TLS协议的工作原理、使用的加密技术、数字证书的重要性等,旨在为读者提供一个全面且深入的理解HTTPS的机会。

当我们浏览网页、使用在线支付或进行在线购物时,我们的数据(如密码、信用卡信息等)需要在互联网上传输。如果这些数据以明文形式传输,那么它们很容易被恶意第三方截获和滥用。为了解决这个问题,HTTPS协议被引入,它为客户端和服务器之间的通信提供了一个加密的通道。

一、回顾一下Http通信过程

1️⃣ 单向认证

以下是HTTPS的单向认证过程。在单向认证中,客户端验证服务器的身份,但服务器并不验证客户端的身份。这是最常见的HTTPS通信方式,适用于大多数网页浏览和互联网服务。

单向认证流程中,服务器端保存着公钥证书和私钥两个文件,整个握手过程如下:
在这里插入图片描述

  1. 客户端发起HTTPS请求: 用户在浏览器或其他客户端中输入一个HTTPS网址,然后客户端连接到服务器的443端口(HTTPS的默认端口)。

  2. 服务器响应并发送证书: 服务器响应客户端的请求,并发送其SSL/TLS数字证书给客户端。这个证书包含了服务器的公钥、证书颁发机构(CA)信息、服务器身份信息以及证书的签名等信息。

  3. 客户端验证服务器证书: 客户端接收到服务器的证书后,会验证证书的合法性。这包括检查证书的颁发机构是否可信、证书是否在有效期内、以及证书的签名是否有效等。如果证书验证失败,客户端会发出警告或中断连接。

  4. 密钥交换与生成: 如果服务器证书验证通过,客户端会生成一个随机的预主密钥(pre-master secret),并使用服务器的公钥进行加密后发送给服务器。服务器使用自己的私钥解密得到预主密钥。然后,客户端和服务器都基于这个预主密钥和一些其他参数,生成一个会话密钥(session key)。这个会话密钥将用于后续的数据加密和解密。

  5. 建立安全连接: 客户端和服务器使用协商出的会话密钥对传输的数据进行加密,确保数据在传输过程中的安全。此后,客户端和服务器之间的所有通信都会使用这个会话密钥进行加密。

  6. 数据传输: 在安全连接建立后,客户端和服务器就可以开始传输数据了。所有的数据在传输前都会被加密,接收方在收到数据后会使用会话密钥进行解密,以获取原始数据。

  7. 连接关闭: 当数据传输完成后,客户端和服务器会关闭连接。如果需要再次通信,它们会重新进行上述的握手和密钥交换过程。

通过上述过程,HTTPS确保了数据在传输过程中的机密性、完整性和身份真实性,从而为用户提供了更安全、更可靠的互联网通信体验。

2️⃣ 双向认证

双向认证(又称为双向SSL认证或双向TLS认证)是一个更严格的安全过程,其中不仅客户端验证服务器的身份,服务器也验证客户端的身份。这通常用于需要更高安全级别的应用,如银行交易或企业内部的敏感数据传输。

在双向认证中,除了单向认证的所有步骤外,还会增加以下步骤:

  • 客户端在发送HTTPS请求时,也会将自己的数字证书发送给服务器。
  • 服务器验证客户端证书的合法性。如果客户端证书验证失败,服务器可以拒绝连接。
  • 如果客户端证书验证通过,服务器和客户端继续进行密钥交换和建立安全连接的过程。
    在这里插入图片描述

由于双向认证增加了额外的安全层,它提供了更高级别的安全保障,但同时也增加了配置的复杂性和成本。因此,它通常只在需要最严格安全保障的场景中使用。

一、SSL/TLS协议详解

HTTPS(全称:Hypertext Transfer Protocol Secure),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS在HTTP的基础下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

在这里插入图片描述

SSL(Secure Sockets Layer)及其后续版本TLS(Transport Layer Security)是HTTPS的核心。它们是一个安全协议,用于在两个通信应用程序之间提供隐私和数据完整性。

1. 握手过程:
这是SSL/TLS协议中最为关键的部分。当客户端(如浏览器)尝试与服务器建立安全连接时,它们会经历一个握手过程。这个过程中,客户端和服务器会协商使用哪种加密套件、交换密钥、验证服务器的身份等。

  • 客户端发送支持的加密套件列表给服务器。
  • 服务器选择其中一个加密套件,并发送其数字证书给客户端。
  • 客户端验证服务器的数字证书。如果证书有效,客户端会生成一个随机的预主密钥(pre-master secret),并使用服务器的公钥加密后发送给服务器。
  • 服务器和客户端都使用这个预主密钥,结合一些其他参数,生成一个会话密钥(session key)。这个会话密钥将用于后续的数据加密。

2. 数据加密:
一旦握手过程完成,客户端和服务器就会使用协商出的会话密钥对传输的数据进行加密。这确保了即使数据被截获,攻击者也无法读取其内容。

3. 数据完整性:
除了加密,SSL/TLS还提供了数据完整性保护。通过使用消息认证码(MAC),可以确保数据在传输过程中没有被篡改。

二、 加密技术

HTTPS通信既使用了对称加密,也使用了非对称加密,二者在HTTPS通信过程中各自扮演了不同的角色。

1. 非对称加密:

  • 用途:主要用于密钥交换和数字证书。非对称加密涉及公钥和私钥两个密钥,公钥用于加密数据,私钥用于解密数据。由于私钥不公开,因此非对称加密具有很高的安全性。
  • 过程:在HTTPS握手阶段,服务器将其公钥(包含在数字证书中)发送给客户端。客户端验证数字证书的有效性后,使用服务器的公钥加密一个随机生成的对称密钥(会话密钥),然后发送给服务器。服务器使用其私钥解密得到会话密钥。

2. 对称加密:

  • 用途:主要用于实际数据传输的加密。对称加密使用相同的密钥进行加密和解密,加密速度快,适合大量数据的加密。
  • 过程:在客户端和服务器通过非对称加密协商好会话密钥后,双方使用该会话密钥对传输的数据进行对称加密。加密后的数据在传输过程中即使被截获,攻击者也无法解密,保证了数据的安全性。

总结来说,HTTPS通信过程中,非对称加密主要用于密钥交换和数字证书验证,确保会话密钥的安全传输;而对称加密则用于实际数据传输的加密,保证数据在传输过程中的机密性。这样结合使用对称加密和非对称加密,既保证了数据的安全性,又提高了加密效率。

三、数字签名和摘要的原理

在HTTPS通信流程中,数字签名和摘要都是确保数据完整性和安全性的重要机制。以下是它们的原理:

1. 数字签名原理

  • 签名生成:发送方(在HTTPS中通常是服务器)使用自己的私钥对数据的摘要进行加密,生成数字签名。摘要是通过Hash函数从原始数据中计算出来的固定长度的字符串,它代表了数据的唯一特征。

  • 签名验证:接收方(在HTTPS中通常是客户端)收到数据和数字签名后,使用发送方的公钥对签名进行解密,得到摘要A。同时,接收方也使用相同的Hash函数对接收到的数据进行计算,得到摘要B。

  • 比较摘要:接收方将摘要A与摘要B进行比较。如果两者相同,说明数据在传输过程中没有被篡改,因为任何对数据的微小改动都会导致Hash值发生显著变化。这样,数字签名就验证了数据的完整性和来源。

2. 摘要原理

  • 摘要生成:摘要是通过Hash函数对原始数据进行计算得到的。Hash函数是一种单向函数,它将任意长度的数据映射为固定长度的字符串(即摘要)。这个过程是不可逆的,即不能从摘要反推出原始数据。

  • 数据完整性校验:由于Hash函数的特性,即使原始数据发生微小的变化,生成的摘要也会完全不同。因此,通过比较发送方和接收方计算的摘要是否一致,可以判断数据是否在传输过程中被篡改。

在HTTPS中,数字签名和摘要通常一起使用,以提供更强的安全保障。服务器在发送数据前会先计算数据的摘要,并对摘要进行签名。客户端收到数据后,会验证签名并重新计算摘要,以确保数据的完整性和来源。这样,即使攻击者截获并篡改了数据,也无法伪造有效的数字签名或通过摘要校验,从而保证了HTTPS通信的安全性。

在这里插入图片描述

3. HTTPS通信中的两个关键加密步骤:密钥交换和数据加密

  • 密钥交换:这个过程通常使用非对称加密。服务器将其公钥(包含在数字证书中)发送给客户端,客户端验证证书后生成一个随机的对称密钥(会话密钥),并使用服务器的公钥加密这个会话密钥,然后发送给服务器。服务器使用其私钥解密得到会话密钥。这一步确保了会话密钥的安全交换。

  • 数据加密:一旦客户端和服务器协商好了会话密钥,双方就会使用这个对称密钥对传输的数据进行加密和解密。这里的数据指的是原文,也就是客户端和服务器之间要传输的实际内容。对称加密确保了数据在传输过程中的机密性,即使数据被截获,攻击者也无法解密得到原文。

至于摘要,它在HTTPS中主要用于数据完整性的校验,而不是直接用于加密。客户端和服务器在传输数据前,都会先对数据计算摘要(使用Hash函数),然后在收到数据后再计算一次摘要,并与发送方的摘要进行比较,以确认数据在传输过程中是否被篡改。

因此,HTTPS中加密的主要内容是原文,而摘要则用于数据完整性的校验。

在这里插入图片描述

四、数字证书与认证

数字证书是HTTPS安全机制中的另一个关键组件。它是由权威的证书颁发机构(CA)签发的,包含了持有者的公钥、持有者的身份信息和CA的签名。

  • 证书的作用:数字证书的主要目的是验证服务器的身份。当客户端连接到服务器时,服务器会发送其数字证书给客户端。客户端可以使用预置的CA证书来验证服务器的证书是否有效。
  • 证书链:为了验证服务器的证书,客户端可能需要验证整个证书链。证书链从服务器的证书开始,一直追溯到根CA证书。每个证书都由其上级CA签名,从而形成一个信任链。
  • 证书吊销:如果服务器的私钥泄露或证书不再需要,CA可以吊销该证书。客户端在验证服务器证书时,也会检查它是否被吊销。这通常通过查询证书吊销列表(CRL)或使用在线证书状态协议(OCSP)来完成。

五、总结

HTTPS通过结合SSL/TLS协议、混合加密技术和数字证书认证,为互联网通信提供了一个安全、可靠的方式。然而,随着技术的发展,新的攻击方法和漏洞也不断出现。因此,持续更新和维护HTTPS的安全机制是至关重要的。作为用户,我们也应该时刻保持警惕,确保我们的数据在互联网上的安全。

相关文章:

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展,网络传输中的数据安全性受到了前所未有的关注。HTTPS,作为HTTP的安全版本,为数据在客户端和服务器之间的传输提供了加密和身份验证,从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…...

【197】JAVA8调用阿里云对象存储API,保存图片并获取图片URL地址。

实际工作中,需要用阿里云对象存储保存图片,并且在上传图片到阿里云对象存储服务器后,获取图片在阿里云对象存储服务器的URL地址,以便给 WEB 前端显示。 阿里云对象存储上传图片的工具类 package zhangchao;import com.aliyun.os…...

2024.1.24 C++QT 作业

思维导图 练习题 1.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 #include <iostream> #include <string.h> #include <array> using namespace std;int main() {string str;cout << "…...

jenkins部署过程记录

一、jenkins部署git链接找不到 原因分析&#xff1a; 机器的git环境不是个人git的权限&#xff0c;所以clone不了。Jenkins的master节点部署机器已经部署较多其他的job在跑&#xff0c;如果直接修改机器的git配置&#xff0c;很可能影响到其他的job clone 不了代码&#xff0c…...

JS-策略设计模式

设计模式&#xff1a;针对特定问题提出的简洁优化的解决方案 一个问题有多种处理方案&#xff0c;而且处理方案随时可能增加或减少比如&#xff1a;商场满减活动 满50元减5元满100元减15元满200元减35元满500元减100元 // 满减金额计算函数 function count(money, type) {if …...

漏洞复现-EduSoho任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

「QT」QString类的详细说明

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「...

微信小程序-04

rpx&#xff08;responsive pixel&#xff09;是微信小程序独有的&#xff0c;用来解决屏适配的尺寸单位。 import 后跟需要导入的外联样式表的相对路径&#xff0c;用 ; 表示语句结束。 定义在 app.wxss 中的样式为全局样式&#xff0c;作用于每一个页面。 在页面的 .wxss 文…...

什么是数据库的三级模式两级映象?

三级模式两级映象结构图 概念 三级模式 内模式&#xff1a;也称为存储模式&#xff0c;是数据物理结构和存储方式的描述&#xff0c;是数据在数据库内部的表示方式。定义所有的内部记录类型、索引和文件组织方式&#xff0c;以及数据控制方面的细节。模式&#xff1a;又称概念…...

初识人工智能,一文读懂机器学习之逻辑回归知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…...

2024 CKA 题库 | 15、备份还原 etcd

不等更新题库 文章目录 15、备份还原 etcd题目:考点&#xff1a;参考链接:解答:备份快照恢复快照 检查 15、备份还原 etcd 题目: 设置配置环境 此项目无需更改配置环境。但是&#xff0c;在执行此项目之前&#xff0c;请确保您已返回初始节点。 [candidatemaster01] $ exit #…...

基于Matlab/Simulink直驱式风电储能制氢仿真模型

接着还是以直驱式风电为DG中的研究对象&#xff0c;上篇博客考虑的风电并网惯性的问题&#xff0c;这边博客主要讨论功率消纳的问题。 考虑到风速是随机变化的&#xff0c;导致风电输出功率的波动性和间歇性问题突出&#xff1b;随着其应用规模的不断扩大以及风电在电网中渗透率…...

计算机网络(第六版)复习提纲16

三 IP地址与MAC地址 1 IP层只能看到IP数据报 2 路由器只根据目的IP地址进行转发 3 局域网的链路层只能看到MAC帧 4 IP层抽象的互联网屏蔽了下层的复杂细节&#xff0c;在网络层讨论问题能够使用统一的、抽象的IP地址来研究主机和主机或路由间的通信 问题&#xff1a; 1 主机或路…...

【AndroidStudio】2022.3Giraffe连接超时,更换下载源,使用本地gradle,版本对应问题

记录了使用AndroidStudio2022.3 Giraffe版本在搭建环境时遇到的问题&#xff0c;包括连接超时&#xff0c;gradle无法读取等。 如果只看如何正确的配置&#xff0c;直接跳转第3节 配置汇总 1 连接超时 项目一开始会自动下载gardle文件来加载项目 1.1 Connect timed out 基…...

【Midjourney】内容展示风格关键词

1.几何排列(Geometric) "Geometric" 是一个与几何有关的词汇&#xff0c;通常用于描述与形状、结构或空间几何特征相关的事物。这个词可以涉及数学、艺术、工程、计算机图形学等多个领域。 使用该关键词后&#xff0c;图片中的内容会以平面图形拼接的方式展示&#…...

openssl3.2/test/certs - 056 - all DNS-like CNs allowed by CA1, no SANs

文章目录 openssl3.2/test/certs - 056 - all DNS-like CNs allowed by CA1, no SANs概述笔记END openssl3.2/test/certs - 056 - all DNS-like CNs allowed by CA1, no SANs 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\…...

mysql INSERT数据覆盖现有元素(若存在)

INSERT...ON DUPLICATE KEY UPDATE的使用 如果指定了ON DUPLICATE KEY UPDATE&#xff0c;并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值&#xff0c;则会更新ON DUPLICATE KEY UPDATE关键字后面的字段值。 例如&#xff0c;如果列a被定义为UNIQUE&#xff0…...

攻防世界WEB新手训练区

view_source 此题我愿称之为网安领域的hello world 查看网页源代码的方式一般有—— 右键->查看网页源代码F12->源代码/来源Ctrlu 随后可以再代码第17行处找到flag&#xff0c;至此迈入网安第一步。可喜可贺&#xff0c;可喜可贺... get_post 考察http的两种请求方式&…...

Go语言安装及开发环境配置

目录 官网 国内 Linux(CentOS & Ubuntu)安装 环境变量设置 命令行下开发 开发模式执行 编译 IDE下开发 插件安装 安装依赖工具 运行 常见问题 1、dial tcp 172.217.160.113:443: i/o timeout 2、VS Code不能完美显示zsh问题 官网 访问Golang官网的下载链接&a…...

知识搜索术学习笔记

1 搜索引擎查询 1.1 推荐网站&#xff1a;Google 1.1.1 谷歌&#xff1a;对中英文支持都十分友好 中文搜索优于百度和Bing&#xff1b;...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...