你真的了解HTTPS协议吗

news2024/11/18 3:28:41

前言

在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用 HTTPS 通信机制可以有效地防止这些问题。本文即将带大家来了解这些。

任何事物都有两面性,为了满足HTTP协议的快,但导致了它有如下的不足:

  • 通信采用明文(不加密),导致内容可能被窃取
  • 不验证通信方的身份,可能遭到伪装
  • 无法证明报文的完整性,可能遭到纂改
  • ........

针对这些问题,我们一一的来解决:

一、HTTP问题的解决方案

1.1、防止通信时的被窃听

目前,最常用的防止窃听的机制是:

  • 通信的加密
  • 内容的加密

1.1.1通信的加密

HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用, 加密 HTTP 的通信内容。

用 SSL建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。与 SSL组合使用的 HTTP 被称为 HTTPS(HTTP Secure,超文本传输安全协议)或 HTTP over SSL。

1.1.2内容的加密

关于内容的加密是一种将参与通信的内容本身加密的方式。

由于 HTTP 协议中 没有加密机制,那么就对 HTTP 协议传输的内容本身加密。即把 HTTP 报文里所含的内容进行加密处理。 在这种情况下,客户端需要对 HTTP 报文进行加密处理后再发送 请求。

为了做到内容的加密,我们则需要满足一个前提:请求方和接收方都要有相同的加密 或 解密的机制。

1.2、验证对方身份信息

由于我们知道:HTTP 协议中的请求和响应不会对通信方进行确认。

我们可以采用SLL中的颁布证书来实现验证对方身份。

先来说说证书是什么?

  • 证书是由可信第三方颁发,确保服务器和客户端的真实身份。
  • 并且伪造证书难度大,验证证书可确认通信对方的真实性,增强安全性,保护用户信息免遭泄露。
  • 同时客户端证书同样用于个人身份验证及网站认证,提高交易可靠性。

1.3、报文的完整性

由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响 应送出之后直到对方接收之前的这段时间内,即使请求或响应的 内容遭到篡改,也没有办法获悉。

换句话说,没有任何办法确认,发出的请求 / 响应和接收到的请 求 / 响应是前后相同的。

但是我们可以通过使用一些方法来解决这个问题:

  1. MD5和SHA-1:可以通过在HTTP头部使用MD5或SHA-1散列值作为一种简单的方式来校验内容完整性,但这两种方法因安全性问题(特别是SHA-1已被证明存在碰撞攻击的风险)现在不建议单独用于安全认证。

  2. ETag和If-Match/If-None-Match:HTTP协议中的ETag是一种实体标签,服务器可以使用它来标识特定版本的资源。客户端在后续请求中可以携带If-Match或If-None-Match头部,服务器根据这些头部验证资源是否发生了改变,间接地确认报文的完整性。

  3. Content-MD5:虽然不常用,HTTP规范中曾定义过一个名为Content-MD5的头部字段,用于包含请求或响应主体的MD5摘要。然而,由于MD5的弱点和Content-MD5在实际应用中的局限性,这种方法很少被采用。

通过介绍完上述的解决方法,其实我们的Https就是这几种的结合体:

二、HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

为了统一解决上述这些问题,需要在 HTTP 上再加入加密处理和认证 等机制。我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代 替而已。

通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通 信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL协议这层外壳的 HTTP。在采用 SSL后,HTTP 就拥有了 HTTPS 的加密、证书和完整性保护 这些功能。

2.1、相互交换密钥的公开密钥加密技术(加密)

在介绍SSL前,了解其使用的公开密钥加密至关重要。这种加密技术公开加密算法,但密钥保密,确保安全。加密解密需密钥,密钥丢失意味着安全防线崩溃,SSL以此为基础增强通信安全。

2.1.1、共享密钥加密

共享密钥加密的困境 加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。

上图引用《图解HTTP》

但是这个共享密钥加密会有一个问题,就是怎么让对方拥有相同的密钥呢,在转发的时候,如果通信被监听了,那么可能落到攻击者的手中,就失去了加密的意义。所以就引出了下面这种新的方法。

2.1.2、使用两把密钥的公开密钥加密

先给出这个的概念:

公开密钥加密方式很好地解决了共享密钥加密的困难。 公开密钥加密使用一对非对称的密钥。一把叫做私有密钥 (private key),另一把叫做公开密钥(public key)。顾名思 义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发 布,任何人都可以获得。

总结上述的:就是一个私钥,是留给自己用来解密的,一个公钥,给别人发送加密的。

这个有些书上并没有将的很清楚,我在这里举一个例子来演示非对称加密的基本原理:

  • 密钥对生成:每个参与通信的个体(如A)都会生成一对密钥,一个称为公钥,可以公开分享给任何人;另一个称为私钥,必须严格保密,不能泄露给他人。

  • 加密过程:当其他人(比如B)想要向A发送一条私密信息时,B会使用A已经公开的公钥对信息进行加密。由于非对称加密算法的设计,一旦使用公钥加密,就只能用对应的私钥来解密。

  • 解密过程:A收到B用其公钥加密的信息后,就可以用自己保有的私钥来解密,获取原始信息。这样即使信息在传输过程中被截获,没有相应的私钥,信息仍然是安全的,无法被破解。

2.1.3、HTTPS采用的混合加密

先来介绍一下这种方式:

HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密 机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开 密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处 理速度要慢。

具体的步骤:

  • 客户端在获取到服务端的公钥后,会利用这个公钥来安全地生成一个会话密钥(也称为对称密钥)。这个过程通常涉及某种形式的密钥交换协议,确保即使在不安全的通道上协商该密钥,潜在的攻击者也无法得知这个密钥的内容。
  • 一旦客户端和服务端都独立计算出了相同的会话密钥,之后的通信就会使用这个会话密钥进行加密和解密。由于会话密钥是对称的,这意味着用它加密的数据可以用同一个密钥解密,这对比非对称加密(如RSA)在性能上更有优势,适合大量数据的快速加解密处理。

证明公开密钥正确性的证书(认证)

公开密钥加密面临的一个挑战在于确保公钥的真实性。当与服务器建立加密通信时,如何验证接收到的公钥确属目标服务器颁发,是一个关键问题。因为在传输过程中,公钥有可能被黑客拦截替换,导致信息流向了错误或恶意的源头,这种攻击称为中间人攻击。因此,需要一种机制来保证公钥的真实性和完整性,这是公开密钥加密体系的一个重要考量点。

为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。可以将CA类比成中介,通过中介来标识互相身份。

2.2、HTTPS 的安全通信机制(完整性)

要了解HTTPS通信机制,我们就要先了解一下HTTPS的通信过程:

  1. 初始请求:客户端(如浏览器)通过TCP连接向服务器发起HTTPS请求,指定要访问的HTTPS网址。

  2. 服务器证书传输:服务器回应客户端请求,发送其数字证书。这包括服务器的公钥、证书颁发机构信息、证书有效期及服务器标识等。

  3. 证书验证:客户端验证服务器证书的合法性,包括检查证书是否过期、是否由受信任的CA签发、以及证书中的域名是否与正在访问的域名匹配。

  4. 密钥交换:验证证书无误后,客户端生成一个会话密钥(对称密钥),用于接下来通信的加密,并使用服务器的公钥加密这个会话密钥,然后发送给服务器。

  5. 密钥解密与会话建立:服务器使用其私钥解密得到会话密钥,至此,客户端和服务器双方都拥有相同的会话密钥,可以开始进行加密通信。

  6. 加密通信:之后的通信内容都使用这个会话密钥进行对称加密,确保数据的保密性和完整性。客户端发送加密的HTTP请求,服务器回复加密的HTTP响应。

  7. 通信结束:当一次请求-响应周期结束后,TCP连接可以保持打开以服务于额外的请求,或者根据配置和需求关闭连接。

在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡 改,从而保护报文的完整性。

2.3、HTTPS的一些缺点

前文也说了,事物都要两面性,说了HTTPS的好,也有它的坏。也可以将这个问题说成,既然HTTPS有这么好,为啥不一直使用它?

  1. 资源消耗:HTTPS连接需要更多的计算资源来处理加密和解密过程,这可能会对服务器和客户端(尤其是资源有限的设备)造成额外的性能负担。

  2. 成本问题:虽然现在获取SSL/TLS证书的成本已经大大降低,甚至可以免费获得基本的证书,但对于大规模部署或需要高级特性的网站来说,仍然可能涉及成本问题,包括证书管理、运维等。

  3. 历史遗留系统:一些老旧的系统或硬件可能不支持HTTPS,或者升级到HTTPS需要大量的工作和测试,这在某些情况下可能会阻碍HTTPS的采用。

  4. 非敏感信息传输:对于一些只传输非敏感信息的网站或应用(如纯信息展示的静态网站),使用HTTPS可能被认为是过度设计,因为没有严格的数据保护需求。

总的来说,虽然HTTPS是推荐的最佳实践,特别是对于涉及用户数据和敏感操作的网站,但在实际应用中,是否使用HTTPS还需权衡安全需求、成本、性能和技术能力等多种因素。随着技术进步和网络安全意识的提高,越来越多的网站和服务正逐步转向全站HTTPS。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ ■ input 子系统简介 input 子系统就是管理输入的子系统, input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层,最终给用户空间提供可访问的设备节点 ■ input 驱…

模仿高效网络进行目标检测——知识蒸馏

摘要 链接:https://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf 当前的基于卷积神经网络(CNN)的目标检测器需要从预训练的ImageNet分类模型中初始化,这通常非常耗时。在本…

【除自身以外数组的乘积】python

目录 思路: 代码: 思路: 直接计算前缀乘积,后缀乘积,然后相乘即可 开始我还在想,遍历一次i,怎么能同时计算前缀乘积和后缀乘积,事实上分开计算比较方便。。 代码: cl…

数据集002:眼疾识别数据集 (含数据集下载链接)

说明 病理性近视(Pathologic Myopia,PM)的医疗类数据集,包含1200个受试者的眼底视网膜图片,训练、验证和测试数据集各400张。 说明: 如今近视已经成为困扰人们健康的一项全球性负担,在近视人…

CMS Full GC流程以及调优配置

个人博客 CMS Full GC流程以及调优配置 | iwts’s blog CMS CMS 收集器是以实现最短 STW 时间为目标的收集器,所以对于偏业务的后台开发而言,基本上都无脑选CMS了。 多线程收集器,工作在老年代,采用标记清除算法。比较特殊&am…

Three.js 研究:3、创建一个高科技圆环

打开Alpha混合 修改环形颜色,更改发光的颜色,更改发光的强度为2 更改世界环境灯光

基于集成经验模态分解的心电信号降噪和基于希尔伯特变换的R峰检测(MATLAB R2018)

近年来,心脏病已成为危害人类健康最常见的疾病。为了有效预防心脏疾病的发生,往往需要更加准确地采集与诊断心电信号,以便于更好地反映心脏情况。心电信号作为人体生理信号,对于识别心脏异常和心脏疾病具有重要的参考价值。心电信…

Docker 常用命令大全!!

Docker 常用命令 一、启动类1. 启动 docker2. 关闭 docker3. 重新启动 docker4. docker 设置自启动5. 查看 docker 运行状态6. 查看 docker 版本号等信息7. docker 帮助 二、 镜像类1. 查看镜像2. 搜索镜像3. 拉取镜像4. 运行镜像5. 删除镜像6. 加载镜像7. 保存镜像 三、容器类…

电机转速计算(基于码盘和IO外部中断)

目录 概述 1 硬件介绍 1.1 整体硬件结构 1.2 模块功能介绍 2 测速框架介绍 2.1 测速原理 2.2 软件框架结构 3 使用STM32Cube配置Project 3.1 准备环境 3.2 配置参数 3.3 生成Project 4 功能实现 4.1 电机控制代码 4.2 测试代码 4.3 速度计算 5 测试 5.1 编写测…

0基础认识C语言

为了给0基础一个舒服的学习路径,就有了这个专栏希望带大家一起进步。 话不多说,开始正题。 一、C语言的一段小历史 C语言的设计要追溯到20世纪60年代末和70年代初,在那个时代美国有这么一号人叫做丹尼斯.里奇,他和同事肯.汤普逊…

pyqt 浮动窗口QDockwidget

pyqt 浮动窗口QDockwidget QDockwidget效果代码 QDockwidget QDockWidget 是 PyQt中的一个控件,它提供了一个可以停靠在主窗口边缘或者浮动在屏幕上的窗口小部件(widget)。QDockWidget 允许用户自定义其界面,并提供了灵活的停靠和…

【数据结构】栈和队列超详细解析

最重要的就是不要去看远方模糊的,而要做手边清楚的事。💓💓💓 目录 ✨说在前面 🍋知识点一:栈 • 🌰1.什么是栈? • 🌰2.如何实现栈 • 🌰3.栈的基本操作…

一文教你使用stream流轻松解决java项目数据枚举显示问题

本篇文章主要讲解java枚举、vo实体类通过stream流形式输出枚举参数的方法。 日期:2024年5月26日 作者:任聪聪 本文代码实例附件:https://download.csdn.net/download/hj960511/89361611 实际效果 可以看到在枚举参数的基础上,我们…

56.合并区间

class Solution {public int[][] merge(int[][] intervals) {// 对 intervals 数组按照每个区间的开始位置进行排序Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);int len intervals.length;// 创建结果数组 res,初始化长度为 intervals 的长度int[][] re…

【Text2SQL 经典模型】TypeSQL

论文:TypeSQL: Knowledge-Based Type-Aware Neural Text-to-SQL Generation ⭐⭐⭐ Code: TypeSQL | GitHub 一、论文速读 本论文是在 SQLNet 网络上做的改进,其思路也是先预先构建一个 SQL sketch,然后再填充 slots 从而生成 SQL。 论文发…

Thinkphp5内核宠物领养平台H5源码

源码介绍 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP,适合做猫狗宠物类的发信息发布,当然懂的修改一下,做其他信息发布也是可以的。 源码预览 源码下载 https://download.csdn.net/download/huayula/89361685

什么是云渗透测试?

推荐阅读: 什么是安全态势? 什么是人肉搜索 什么是恶意软件? 什么是数字取证? 什么是语音网络钓鱼? 什么是网络安全中的社会工程? 什么是网络安全中的威胁情报? 什么是端点检测和响应 (…

面试中算法(A星寻路算法)

一、问题需求: 迷宫寻路游戏中,有一些小怪物要攻击主角,现在希望你给这些小怪物加上聪 明的AI (Artificial Intelligence,人工智能),让它们可以自动绕过迷宫中的障碍物,寻找到主角的所在。 A星…

flink程序本地运行:No ExecutorFactory found to execute the application

1.问题描述 在idea中运行flink job程序出现如下错误: Exception in thread "main" java.lang.IllegalStateException: No ExecutorFactory found to execute the application. at org.apache.flink.core.execution.DefaultExecutorServiceLoader.getE…

Linux基础 (十):Linux 信号的使用

目录 一、信号的基本概念 二、信号处理常见方式概览 三、修改信号的响应方式 – signal() 3.1 简单复习结束前台进程 3.2 改变SIGINT信号的响应方式 3.3 自定义方式改变进程对信号的响应 3.4 进程对信号作出两种响应 四、发送信号 – kill() 五、利用信号解决僵死进程…