从 HTTP 到 HTTPS 再到 HSTS

近些年,随着域名劫持、信息泄漏等网络安全事件的频繁发生,网站安全也变得越来越重要,也促成了网络传输协议从 HTTP 到 HTTPS 再到 HSTS 的转变。

HTTP

HTTP(超文本传输协议) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是互联网数据通信的基础。它是由万维网协会(W3C)和互联网工程任务组(IETF)进行协调制定了 HTTP 的标准,最终发布了一系列的 RFC,并且在1999年6月公布的 RFC 2616,定义了 HTTP 协议中现今广泛使用的一个版本——HTTP 1.1。

HTTP 访问过程

HTTP 属于 TCP/IP 模型中的应用层协议,当浏览器与服务器进行互相通信时,需要先建立TCP 连接,之后服务器才会接收浏览器的请求信息,当接收到信息之后,服务器返回相应的信息。最后浏览器接受对服务器的信息应答后,对这些数据进行解释执行。

△http 1.0 请求模式

HTTP 1.0 时,浏览器每次访问都要单独建立连接,这会造成资源的浪费。

后来HTTP 1.1可以在一次连接中处理多个请求,并且将多个请求重叠进行

△http 1.1 请求模式

HTTP 协议特点

1. 简单、快速、灵活:当用户想服务器发送请求时,只需传送请求方法和路径即可,HTTP 允许传输任意类型的数据对象。并且HTTP协议简单易用,HTTP 服务器规模小,保证了网络通信的速度;

2. 无连接、无状态:HTTP协议限制每次连接只处理单个请求,当服务器收到用户请求后就会断开连接,保证了传输时间的节省。同时HTTP协议对事务处理没有记忆能力,如果后续的请求需要使用前面的信息就必须重传数据;

3. 管线化和内容编码:随着管线化技术的出现,HTTP 请求比持久性连接速度更快,并且当某些报文的内容过大时,为了减少传输的时间,HTTP 会采取压缩文件的方式;

4. HTTP支持客户/服务器模式

从HTTP到HTTPS

HTTP 协议由于其简单快速、占用资源少,一直被用于网站服务器和浏览器之间进行数据传输。但是在数据传输的过程中也存在很明显的问题,由于 HTTP 是明文协议,不会对数据进行任何方式的加密。当黑客攻击窃取了网站服务器和浏览器之间的传输报文的时,可以直接读取传输的信息,造成网站、用户资料的泄密。因此 HTTP 不适用于敏感信息的传播,这个时候需要引入 HTTPS(超文本传输安全协议)。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure )是一种以计算机网络安全通信为目的的传输协议。在HTTP下加入了SSL层,从而具有了保护交换数据隐私和完整性和提供对网站服务器身份认证的功能,简单来说它就是安全版的 HTTP 。

△ HTTP、HTTPS 差异

HTTPS 访问过程

HTTPS在进行数据传输之前会与网站服务器和Web浏览器进行一次握手,在握手时确定双方的加密密码信息。

具体过程如下:

1. Web 浏览器将支持的加密信息发送给网站服务器;

2. 网站服务器会选择出一套加密算法和哈希算法,将验证身份的信息以证书(证书发布CA机构、证书有效期、公钥、证书所有者、签名等)的形式发送给Web浏览器;

3. 当 Web 浏览器收到证书之后首先需要验证证书的合法性,如果证书受到浏览器信任则在浏览器地址栏会有标志显示,否则就会显示不受信的标识。当证书受信之后,Web 浏览器会随机生成一串密码,并使用证书中的公钥加密。之后就是使用约定好的哈希算法握手消息,并生成随机数对消息进行加密,再将之前生成的信息发送给网站;

△ Chrome 浏览器 HTTPS安全标识

4. 当网站服务器接收到浏览器发送过来的数据后,会使用网站本身的私钥将信息解密确定密码,然后通过密码解密Web浏览器发送过来的握手信息,并验证哈希是否与Web浏览器一致。然后服务器会使用密码加密新的握手信息,发送给浏览器;

5. 最后浏览器解密并计算经过哈希算法加密的握手消息,如果与服务发送过来的哈希一致,则此握手过程结束后,服务器与浏览器会使用之前浏览器生成的随机密码和对称加密算法进行加密交换数据。

△ HTTPS 握手过程

HTTPS 加密算法

为了保护数据的安全,HTTPS 运用了诸多加密算法:

1.对称加密:有流式、分组两种,加密和解密都是使用的同一个密钥。

例如:DES、AES-GCM、ChaCha20-Poly1305 等。

2.非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。

例如:RSA、DSA、ECDSA、 DH、ECDHE 等。

3. 哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。

例如:MD5、SHA-1、SHA-2、SHA-256 等。

4. 数字签名:签名就是在信息的后面再加上一段内容(信息经过 hash 后的值),可以证明信息没有被修改过。hash 值一般都会加密后(也就是签名)再和信息一起发送,以保证这个 hash 值不被修改。

从 HTTPS 到 HSTS

但是当网站传输协议从 HTTP 到 HTTPS 之后,数据传输真的安全了吗?

由于用户习惯,通常准备访问某个网站时,在浏览器中只会输入一个域名,而不会在域名前面加上 http:// 或者 https://,而是由浏览器自动填充,当前所有浏览器默认填充的都是http://。一般情况网站管理员会采用了 301/302 跳转的方式由 HTTP 跳转到 HTTPS,但是这个过程总使用到 HTTP 因此容易发生劫持,受到第三方的攻击。

这个时候就需要用到 HSTS(HTTP 严格安全传输)。

△ HTTP 请求劫持

HSTS

HSTS是国际互联网工程组织 IETF 正在推行一种新的 Web 安全协议,网站采用 HSTS 后,用户访问时无需手动在地址栏中输入 HTTPS,浏览器会自动采用 HTTPS 访问网站地址,从而保证用户始终访问到网站的加密链接,保护数据传输安全。

HSTS原理

HSTS 主要是通过服务器发送响应头的方式来控制浏览器操作:

1. 首先在服务器响应头中添加 HSTS 响应头:

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]

此响应头只有在 https 访问返回时才生效,其中[ ]中的参数表示可选;

2. 设置 max-age 参数,时间设置不宜过长,建议设置时间为 6 个月;

3. 当用户下次使用 HTTP 访问,客户端就会进行内部跳转,并且能够看到 307 Redirect Internel 的响应码;

4. 网站服务器变成了 HTTPS 访问源服务器。

开启 HSTS 后网站可以有效防范中间人的攻击,同时也会省去网站 301/302 跳转花费的时间,大大提升安全系数和用户体验。

开启 HSTS 后网站安全系数检测测评

开启 HSTS 以后,可以到 ssllabs 进行测试,网站的安全等级会进一步提升。

开启前等级为:A

开启后等级变为:A+

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

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

相关文章

01-Chromedriver下载与配置(mac)

下载地址: 这里我用的最后一个,根据自己chrome浏览器选择相应的版本号即可 ChromeDriver官网下载地址:https://sites.google.com/chromium.org/driver/downloads ChromeDriver官网最新版下载地址:https://googlechromelabs.git…

面试技术点之安卓篇

一、基础 二、高级 三、组件 Android中SurfaceView和TextureView有什么区别? 参考 Android中SurfaceView和TextureView有什么区别? 四、三方框架 五、系统源码 六、性能优化

架构13-持久化存储

零、文章目录 架构13-持久化存储 1、Kubernetes 存储设计 (1)存储设计考量 **设计哲学:**Kubernetes 遵循用户通过资源和声明式 API 描述意图,Kubernetes 根据意图完成具体操作。**复杂性:**描述用户的存储意图本身…

可视化建模以及UML期末复习----做题篇

一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…

idea_maven详解

秒懂Maven maven简介maven安装和配置maven本地配置maven工程的GAVP创建maven工程项目结构说明项目构建说明 Maven依赖管理核心信息配置依赖管理配置依赖信息查询依赖范围设置依赖属性配置依赖下载失败错误解决Build构建配置依赖传递依赖冲突 maven工程继承继承作用应用场景继承…

vue3+vite纯前端实现自动触发浏览器刷新更新版本内容,并在打包时生成版本号文件

前言 在前端项目中,有时候为了实现自动触发浏览器刷新并更新版本内容,可以采取一系列巧妙的措施。我的项目中是需要在打包时候生成一个version.js文件,用当前打包时间作为版本的唯一标识,然后打包发版 ,从实现对版本更…

鸿蒙实现应用通知

目录: 1、应用通知的表现形式2、应用通知消息的实现1、发布普通文本类型通知2、发布进度类型通知3、更新通知4、移除通知 3、设置通知道通展示不同形式通知4、设置通知组5、为通知添加行为意图1、导入模块2、创建WantAgentInfo信息3、创建WantAgent对象4、构造Notif…

2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)

首先到官网上下载安装包:http://www.mysql.com 点击下载,拉到最下面,点击社区版下载 windows用户点击下面适用于windows的安装程序 点击下载,网络条件好可以点第一个,怕下着下着断了点第二个离线下载 双击下载好的安装…

【RabbitMQ】RabbitMQ中核心概念交换机(Exchange)、队列(Queue)和路由键(Routing Key)等详细介绍

博主介绍:✌全网粉丝21W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【C++笔记】AVL树的深度剖析

【C笔记】AVL树的深度剖析 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】AVL树的深度剖析前言一. AVL树的概念二.AVL树的实现2.1 AVL树的结构2.2 AVL树的插入2.3 平衡因子更新 三.旋转3.1旋转的原则3.2右单旋3.3左…

Ubuntu 环境安装 之 RabbitMQ 快速入手

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…

IAR环境下的FlashLoader设计

目录 1.为什么要Flash Loader 2.Flash Loader设计细节 2.1 简单的代码框架 2.2 迷人的宏使用 2.3 关键的配置文件 3.dmac和mac文件 4.小结 搞国产车规芯片,IAR是必不可少的编译调试集成工具,历史背景不赘述,今天主要聊聊基于IAR的Fla…

一些硬件知识【2024/12/6】

MP6924A: 正点原子加热台拆解: PMOS 相比 NMOS 的缺点: 缺点描述迁移率低PMOS 中的空穴迁移率约为电子迁移率的 1/3 到 1/2,导致导通电流较低。开关速度慢由于迁移率较低,PMOS 的开关速度比 NMOS 慢,不适合高速数字电…

在本地运行大语言模型

1,打开下面网站下载,软件 lm studio 2, 设置模型下载路径 3,没有魔法条件的人,去镜像网站下载模型的镜像文件 、 4,

【单片机】ESP32-S3+多TMC2209控制步进电机系列3 使用TMC2209库实现UART通讯

目录 1.下载TMC2209.h库2.代码部分3.效果展示 1.下载TMC2209.h库 在Arudino环境中,有两个不错的库可以驱动TMC2209。 TMC2209库TMCStepper库 TMC2209库只针对TMC2209驱动器,而TMCStepper库除了能够支持TMC2209驱动器,还能够支持其他TMC的驱…

【服务器部署应用由http协议切换为https】

文章目录 服务器部署应用由http协议切换为https1. 下载openssl及其配置1.1 下载1.2 无脑下一步即可1.3 环境变量配置1.4 验证配置以及生成证书证书路径 2. nginx配置修改 服务器部署应用由http协议切换为https 1. 下载openssl及其配置 1.1 下载 openssl下载地址 根据系统选择…

Linux——管理用户和用户组

一、用户有哪些 root用户 定义:root用户是Linux系统中的最高权限用户,具有对系统所有资源的完全控制权。特性:root用户可以执行系统中的任何操作,包括修改系统配置文件、安装软件、管理系统服务等。由于其拥有最高权限&#xff0c…

synchronized的特性

1.互斥 对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。 就比如synchronized修饰代码块时,一个线程进入该代码块就会进行“加锁”。 退出代码块时会进行“解锁”。 当其他线程想要访问被加锁的代码块时,就会阻塞等待。 阻塞等待…

如何在树莓派上安装Arduino IDE

git clone https://github.com/JetsonHacksNano/installArduinoIDE.git cd installArduinoIDE ./installArduinoIDE.sh sudo reboot sudo shutdown -h now