从HTTP到HTTPS:网站安全通信的演进之路

news2024/12/23 20:57:36

        HTTP协议与TCP/IP协议族内的其他协议相同部分,用于客户端和服务器端的通信。下面来看一下HTTP具体是怎么工作的。

1、HTTP前生今世

  在HHTP/0.9版本,主要是通过确立了客户端请求、服务器端响应的通信流程来解决HTML文件传输,只能获取文本资源。HTTP/1.0是一个简单的文本协议,通过设立头部字段来解决不同文件类型的传输。HTTP/1.1是目前互联网上使用最广泛的协议,通过建立长连接进行复用来解决创建和断开TCP连接开销大的问题。功能也非常完善。HTTP/2基于Google的SPDY协议,通过二进制分帧来解决并发数有限的问题,更加注重性能的改善,但是还未普及。HTTP/3基于Google的QUIC协议,采用UDP协议解决TCP丢包阻塞的问题,是将来的发展方向。

2、HTTP报文是什么样子的

HTT协议的请求报文和响应报文的结构基本相同,有三大部分:

  1. 起始行(start line):描述请求或响应的基本信息;
  2. 头部字段集合(header):实用key-value的形式更详细的说明报文
  3. 消息正文(entity):实际传播的数据,不一定是纯文本,可以试图片,视频等二进制数据

 ‘请求头’/‘响应头’:起始行+头部字段集合

‘body’’:实体、消息正文

3、HTTP 的请求方法

  • HTTP1.0定义了三种请求方法:GET、POST和HEAD方法
  • HTTP1.1新增了五种请求方法:OPTION,PUT,DELETE,TRACE和CONNECT

HTTP1.1规定了以下请求方法:

  1. GET:请求获取Request-URI所标识的资源
  2. POST:在Request-URI所标识的资源后附加新的数据
  3. HEAD:请求获取由Request-URI所标识的资源的响应消息报头
  4. PUT:请求服务器存储一个资源。并用Requeest-URI作为其标识(修改数据)
  5. DELET:请求服务器删除对应所标识的资源
  6. TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
  7. CONNECT:建立连接隧道,用于代理服务器
  8. OPTIONS:列出可对资源实行的请求方法,用来跨域请求

4、常见的HTTP请求头和响应头

  • HTTP Request Header常见的请求头:
  1. Accept:浏览器能够处理的内容信息
  2. Accept-Charset:浏览器能够显示的字符集
  3. Accept-Language:浏览器当前设置的语言
  4. Connection:浏览器与服务器之间连接的类型
  5. Cookie:当前页面设置的任何Cookie
  6. Host:发出请求的页面所在的域
  7. Referer:发出请求的URL
  8. User-Agent:浏览器的用户代理字符串
  • HTTP Response Header常见的响应头:
  1. Data:表示消息发送时间,时间的描述格式有rfc822定义
  2. server:服务器名称
  3. Connection:浏览器与服务器之间连接的类型
  4. Cache-Control:控制浏览器缓存
  5. content-type:表示后面的文档属于什么MIME类型的con

常见的Content-Type属性值有以下四种:

  1. application/x-222-form-urlencoded:浏览器的原生form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据。该种方式提交的数据放在body里面,数据按照key1=val1&key2=val2的方式进行编码,key和val都进行了URL转码。
  2. multipart/form-data:该种方式也是一个常见的POST提交方式,通常表单上传文件时使用改种方式。
  3. application/json:服务器消息主体是序列化后的JSON字符串。
  4. text/xml:该种方式主要用来提交XML格式数据。

5、HTTP协议的优缺点

   HTTP是一种超文本传输协议,是一个在计算机世界里专门在两点之间传输文字、图视频等超文本数据的预定和规范。

  • ​​​​   HTTP特点
  1. 灵活可扩展。一个语法只规定了基本格式,空格分隔单词,换行分隔字段等。另外一个就是传输形式上不仅可以传输文本,还可以传输图片,视频等任意数据。
  2. 请求-应答模式。通常是一方发送消息,另一方要接受消息。
  3. 可靠传输,HTTP是基于TCP/IP,因此把这一特性继承下来了。
  4. 无状态,这个分场景回答即可。
  • HTTP缺点
  1. 无状态。有时候需要保存信息,比如像购物系统,需要保留顾客信息等等,另一方面,有时候,无状态也会减少网络开县,比如类似直播行业这样子等,分各种场景。
  2. 明文传输,即协议里的报文(主要指的是头部)不使用二进制数据,而是文本形式。这让报文信息暴露给了外界,给攻击者带来了遍历。
  3. 队头阻塞。当HTTP开启长连接时候,共用一个TCP连接,当某个请求时间过长时候,其他的请求只能处于阻塞状态,这就是队头阻塞问题。

6、HTTPS和HTTP区别

        HTTPS要比HTTP多了secure安全性这个概念,实际上,HTTPS并不是一个新的协议层,其实就是HTTP+TLS/SSL协议组合而成,而安全性的保证正式SSL/TLS所做的工作。

  • SSL:安全套接层(Secure Sockets Layer)
  • TLS:传输层安全(Transport Layer Security):现在主流TLS/1.2,之前的TLS1.0、TLS1.1都被认为是不安全的,在不就的将来会被完全淘汰

区别:

  1. HTTP是明文传输。HTTPS是由SSL由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,比HTTP协议安全
  2. HTTPS比HTTP更加安全,对搜索引擎更加友好,利于SEO,谷歌、百度有索引HTTPS网页。
  3. HTTPS标准端口443,HTTP标准端口80
  4. HTTPS需要用到SSL证书,而HTTP不用

HTTPS总结为两点:

        对数据进行了加密,并建立一个信息安全通道来保证传输过程中的数据安全

        对网站服务器进行真实身份认证

HTTPS的缺点:

  • 证书费用以及更新维护
  • HTTPS降低一定用户访问速度
  • 消耗CPU,需要增加大量机器

7、HTTPS工作原理

首先HTTPS可以理解成HTTP+SSL/TLS

        TLS/SSL的功能实现主要依赖于三类基本算法:散列函数、对称加密和非对称加密。利用非对称加密实现身份认证也秘钥协商,对称加密算法采用协商的秘钥对数据进行加密,基于散列函数验证信息的完整性。

  • 对称加密

加密和解密使用统一个秘钥进行加密的方式叫做对称加密,但是客户端和服务器端公用同一套秘钥同时也会存在一定的问题如下。

  1. WWW万维网有许许多多的客户端,不可能都用密钥a进行信息加密,所以只能一个客户端一个密钥
  2. 不同客户端不同密钥,但是密钥如何传传输?解决办法是一端生成一个密钥,然后通过HTTP传输给另一端,那么这样子又产生新的问题
  3. 传输密钥的过程如何进行加密?如果中间人拦截,密钥也会被获取

所以我们需要非对称加密的方式

  • 非对称加密

        非对称加密采用的算法是RSA,所以在一些文章中也会看见传统的RSA握手,基于现在TLS主流版本是1.2,所以接下来梳理的是TLS/1.2握手过程。 

  1. 有一对秘钥,公钥和私钥
  2. 公钥加密的内容只有私钥可以解开,私钥加密的内容所有的公钥都能解开,这里说的公钥都可以解开是指一对密钥。
  3. 公钥可以发送给所有的客户端,私钥只保存在服务器端
  • 主要工作流程

TLS1.2握手过程主要分为舞步五步

  1.  客户端发起一个HTTPS请求,链接443端口。这个过程可以理解成式请求公钥的过程
  2. 服务器端收到请求后,通过第三方机构私钥加密,会把数字证书(也可以理解为公钥证书)发送给客户端
  3. 浏览器安装后会自带一些权威第三方机构公钥吗,使用匹配的公钥对数字签名进行解密。根据数字签名生成的规则对网站信息进行本地签名生成,然后两者对比。对比两者匹配成功则说明认证通过获得证书,不匹配则获取证书失败。
  4. 在客户端拿到认证通过的数字服务器公钥之后,客户端随机生成一个对称密钥,使用服务器公钥加密这个对称密钥,发送给服务器
  5. 服务器通过自己的私钥对信息进行解密。得到了对称密钥,英雌两者都拥有了相同的对称密钥

但是如果公钥被中间人拿到篡改怎么办呢?如下图所示

  • 第三方认证

因为客户端无法识别公钥是中间人还是服务器端的,为了解决这个问题,可以通过某种规范让客户端和服务器端都遵循某种约定?那就是第三方认证的方式

在HTTPS通过签名+证书的方式来解决中间攻击的。

        我们再次假设中间人截取到服务器的公钥后,去替换成自己的公钥,因为有数字签名的存在,这样子客户端验证发现数字签名不匹配,这样子就放置中间人替换公钥的问题。

参考:

前端进阶之旅

前端面试题汇总

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

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

相关文章

xen-trap

Xen-Trap xen的虚拟化实现有一个很重要的机制就是tarp,中文可以暂且叫做陷入。在ARMv8中,trap就是异常等级的一个切换。 当发生trap的时候,就会进入设定好的异常向量表中,硬件自动判断属于哪种类型的异常。 一、异常处理 ARM…

天然气跟踪监管系统信息更新

天然气跟踪监管系统信息更新 ① 新增仓库,第一步,“编辑仓库”对话框新增栏第二步,提交jQuery序列化新增仓库的form表单第三步,新增仓库成功第一步,创建编辑对象第二步,获取仓库修改后的几何图形及面积数据…

学习计算机网络中的一些疑问及解答

文章目录 前言一、为什么要进行三次握手二、三次握手的流程三、三次握手中seq和ack的值四、四次挥手流程五、四次挥手中seq和ack的值六、为什么要等待才回复七、为什么等待2MSL总结 前言 一个本硕双非的小菜鸡,备战24年秋招,在学习计算机网络的过程中遇…

CLR via C#(三)垃圾回收

一、资源生命周期 每个程序运行都需要各种资源,如文件、内存缓冲区、数据库等。要使用这些资源,就必须为代表资源的类型分配内存。访问一个资源所需的步骤如下: 调用IL指令newobj,为代表资源的类型分配内存(在C#中一…

NSS [HNCTF 2022 WEEK2]ohmywordpress(CVE-2022-0760)

NSS [HNCTF 2022 WEEK2]ohmywordpress(CVE-2022-0760) 题目描述:flag在数据库里面。 开题: 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面,有一个搜索框。 F12看看network。 又出现了这个…

在 Android 设备或仿真器上进行测试

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 Windows Defender 概述 如何将排除项添加到 Windows Defender Android 开发时要考虑的排除项 本指南介绍如何在 W…

JavaScript逆向循环和嵌套循环

逆向循环 ● 我们还是使用以下这个数组进行演示 const ITshareArray ["张三","二愣子",2033 - 1997,"程序员",["李四", "王五", "牛二"], ];● 现在我们还是想循环的列出数组的值,但是我们倒着来&a…

l14 IO模型

一、基本概念 I/O即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作 通常用户进程中的一个完整I/O分为两个阶段 1.用户进程空间<-->内核空间 2.内核空间<-->设备空间&#xff08;磁盘、网卡等&#xff09; I/O分为内存I/O、网络…

Bash脚本学习 - 条件句、数组、for循环,函数

1. 条件测试 [ 和 ] 是一个用于执行条件测试的命令。它们必须用空格分隔开&#xff0c;并且在 [ 后面和 ] 前面必须有空格。-eq 是一个比较运算符&#xff0c;表示等于&#xff08;equal&#xff09;。它用于比较两个值是否相等。 2. 条件句 在 ifelseifelse.sh 文件中&#…

Acwing 827. 双链表

Acwing 827. 双链表 题目要求思路讲解初始化在第k个点右边插入&#xff1a;如果想在k的左边插入x&#xff0c;只要这样调用就可以了&#xff1a;删除怎么做&#xff1a; 代码展示 题目要求 思路讲解 初始化 在第k个点右边插入&#xff1a; 如果想在k的左边插入x&#xff0c;只…

【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍历、层序遍历、锯齿形层序遍历、二叉树右视图

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【二叉树的遍历】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为…

如何实现一个IO口读取多个设备信息

前言 &#xff08;1&#xff09;今天遇到一个有意思的问题一个IO口如何读取多个电机的堵转问题。之后他就发了一张图片 &#xff08;2&#xff09;看到这个问题&#xff0c;之前先说一个简单的。我们如何实现一个IO读取多个按键&#xff0c;了解了这个之后&#xff0c;对于多个…

Python 变量

视频版教程 Python3零基础7天入门实战视频教程 变量 无论使用什么语言编程&#xff0c;总要处理数据&#xff0c;处理数据就需要使用变量来保存数据。变量就像一个个小容器&#xff0c;用于“盛装”程序中的数据。 再说说&#xff0c;Python的数据类型&#xff0c;有以下六种…

Prometheus+Grafana 基础监控告警体系搭建(一):服务的基本安装

文章目录 1. prometheus 安装1.1. 下载安装包1.2. 基本设置1.3. 解压安装包1.4. 配置 service 启动文件1.5. 启动服务 2. Grafana 安装2.1. 下载安装包2.2. 安装2.3. 启动服务 3. 总结一下 打算重新练下手&#xff0c;免得忘记了&#xff0c;这次内网进行了全面部署演示&#x…

编程任务|随机摆放的刀叉开始认识数学思维

任务源自旧版的Brilliant数学讨论问题。2019-09-02我曾经发布过&#xff0c;可惜已经下线&#xff0c;幸活大喵做足备份。 该问题看似是概率问题&#xff0c;实则不然。 官方给出的解法透露出一个非常重要的数学思维方法&#xff1a; 数学语言 —— 为何以及如何构造一个函数 f…

计算机丢失msvcr110.dll解决办法,多种msvcr110.dll解决方法分享

随着 Windows 操作系统的发展&#xff0c;越来越多的用户在使用电脑时遇到了计算机丢失 msvcr110.dll 的问题。msvcr110.dll 是 Windows 操作系统中的一个动态链接库文件&#xff0c;它包含了许多常用的 C 运行库函数。因此&#xff0c;当计算机丢失 msvcr110.dll 时&#xff0…

Kotlin File useLines nameWithoutExtension extension

Kotlin File useLines nameWithoutExtension extension import java.io.Filefun main(args: Array<String>) {val filePath "myfile.txt"val file File(filePath)println(file.name) //文件名字&#xff0c;不包括路径println(file.isFile) //是文件吗pri…

PTA:7-4 顺序表(删除)

顺序表&#xff08;删除&#xff09; 题目输入样例输出样例 代码 题目 输入样例 10 55 11 9 15 67 12 18 33 6 22 10 20输出样例 55 9 67 33 6 22代码 #include<iostream> using namespace std; void deletes(int* arr, int& sz, int left, int right) {int newId…

Vue入门简介(带你打开Vue的大门)

目录 前言 一、Vue简介 1. 什么是Vue 2. Vue的应用场景 3. Vue的作用&#xff08;重要性&#xff09; 4. 什么是MVVM模式 5. 开源库网址 二、Vue入门使用 1. 基础使用步骤 1.1 引入Vue.js 1.2 创建Vue实例 1.3 编写Vue模板 1.4 数据绑定与指令 1.5 调用Vue方法和…

【C++】哈希位图和布隆过滤器

哈希位图优缺点位图应用模拟实现代码 哈希布隆过滤器哈希布隆过滤器的提出哈希布隆过滤器概念模拟实现代码 为什么哈希布隆图要比位图省空间 哈希位图和布隆过滤器都是常用的概率数据结构&#xff0c;用于高效地判断一个元素是否存在于一个集合当中&#xff0c;但它们在实现方法…