Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从HTTP到HTTPS

从HTTP到HTTPS

作者头像
喵叔
发布于 2020-12-14 03:20:41
发布于 2020-12-14 03:20:41
8840
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏
一、HTTP Begin
1、什么是 HTTP

HTTP 是基于文本传输的协议,它位于 OSI 七层模型的应用层(Application) ,HTTP 是通过客户端向服务器发送请求,服务器响应请求来进行通讯,截止到目前位置 HTTP 协议分别由 6 个独立的协议说明组成,这 6 个协议说明分别是 RFC 7230RFC 7231RFC 7232RFC 7233RFC 7234RFC 7235

说到 HTTP 就不得不说通讯报文,下面我们来看看 HTTP 通讯报文。通讯报文分为 请求报文响应报文

  • 请求报文 HTTP请求报文通常由请求行(request line)、请求头部(header)、空行和请求数据4个部分组,如下图所示:

请求行包含请求方法、URL 和 HTTP 协议版本三个字段组成,在这里需要说的是 请求方法可以实 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,但是常见的经常用到的就是 GET、POST、DELETE和 PUT。请求头部由大量键值对组成,请求头部的数据都是向服务器告知客户端的信息,比较常见的请求头有 User-Agent 浏览器类型,Accept 客户端可识别的内容类型列表,Host 请求的主机名。接下来是一个空行,它主要用来通知服务器从当前行开始往下就不再是请求头了。请求数据主要是在 POST 和 PUT 方法中使用,用来向服务器提交客户端的表单信息,一般需要配合着 Content-Type和Content-Length 使用。

  • 响应报文 响应报文也是由三部分组成,状态行、消息报头和响应正文。状态行用来告知客户端所请求资源的情况,状态行由 HTTP 版本、服务器回发响应状态码和状态码文本描述组成。这里要说一下响应状态码,状态码类型如下表所示:

类型

说明

1xx

表示请求已接收,继续处理

2xx

表示请求已被成功接收、理解、接受

3xx

要完成请求必须进行更进一步的操作

4xx

请求有语法错误或请求无法实现

5xx

服务器未能实现合法的请求

上表看着响应状态码很多,但是大部分在实际运用中很少遇到,经常遇到的状态码一共 7 中,如下表所示:

状态码

说明

200 OK

客户端请求成功

400 Bad Request

客户端请求有语法错误,不能被服务器所理解

401 Unauthorized

请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden

服务器收到请求,但是拒绝提供服务

404 Not Found

请求资源不存在,举个例子:输入了错误的URL

500 Internal Server Error

服务器发生不可预期的错误

503 Server Unavailable

服务器当前不能处理客户端的请求,一段时间后可能恢复正常

2、HTTP 致命缺点

HTTP 有一个致命的缺点,就是 HTTP 的报文都是以明文的方式进行传输,这样就会导致中间人攻击问题。什么是中间人攻击了,下面我们通过图文的形式讲一下。 A 在客户端向服务器发送了一句话“我今天很好”,这时在数据还没有到达服务器的时候被 B 拦截到,B 将发送的内容改为“我昨天很好”并发送给服务器,最后服务器接收到的信息就是“我昨天很好”而不是“我今天很好”。在这里 B 就是中间人,B 所执行的所有操作就叫做中间人攻击,一图胜千言我们来看图。

3、HTTP 预防致命缺点手段

要想预防中间人攻击我们就需要对发送的报文信息进行加密处理,一般来说我们会采用两种加密手段来预防中间人攻击:对称加密非对称加密

  • 对称加密 首先 A 发送一条信息告诉服务器我要和你通讯了,服务器收到这条信息后响应一条信息告诉 A 的加密方式(例如 AES 加密)和密钥,最后 A 用和服务器协商好的加密方式对信息进行加密并发送,服务器收到信息后利用密钥进行解密即可。

通过上图看出点什么没?发送的内容虽然已经加密了,但是加密方式和密钥依然是明文,中间人如果拦截到第一次通信的话,它就可以拿着拦截到的加密方式和密钥就可以对后面的通信进行解密,修改内容后再以同样的加密方式和密钥进行加密后发送个服务器。

  • 非对称加密 针对前面所说的情况我们可以使用非对称加密对密钥进行加密处理。同样首先 A 发送一条信息告诉服务器我要和你通讯了,服务器收到这条信息后先利用非对称加密(例如RSA)生成一个公钥和一个私钥,然后服务器将公钥发发送给 A ,A 在本地生成一个密钥并利用服务器发回的公钥进行加密,完成后发送给服务器,服务器收到后利用私钥进行解密得到对称加密的密钥,最后双方利用约定好的加密方式和密钥进行通信。

到目前为止看起来不错密钥和信息都加密了,应该就没问题了吧。真的是这样吗,如果真的是这样的话 HTTPS 就没有出现的必要了。既然密钥都加密了,那么中间人在拦截到第一次通信时可以拿到服务器发给客户端的加密方式和公钥,然后自己生成一个私钥和一个公钥,并将拦截到的服务器发来的公钥替换成自己生成的公钥后发送给客户端,这时客户端加密 AES 密钥的公钥就是中间人的了。客户端对 AES 密钥加密后发送给服务器,中间人再次拦截并利用自己的私钥解析密文得到AES 密钥,然后使用服务器的公钥对 AES 密钥加密并发送给服务器。最后在客户端和服务器的整个通讯期间中间人就可以用接获到 AES 密钥对信息解密并修改。

到这里一定会由同学问,这两种方法都无法完全避免中间人攻击,还有其他的办法吗?下面我们伟大的 HTTPS 就要登场了,它可以完全避免中间人攻击。

二、HTTPS End
  1. 什么是 HTTPS HTTPS 就是 HTTP 和 TLS 的简称,以前的 HTTPS 使用的是 SSL ,现在的 HTTPS 使用的是 SSL 。TLS 整体上来说和非对称加密是一样的,主要是对 AES 密钥加密的。简单来说就是 A 发送一条信息给服务器告诉服务器我要和你通信,然后服务器返回 TLS/SSL 证数,客户端在收到证书后校验证书的有效性,如果证书有效就生成生成 AES 密钥并用证书中的公钥加密,然后发送给服务器。服务器确认收到后,就可以利用 AES 密钥进行加密通信了。
  1. 关于 CA 认证体系 CA 认证体系是 HTTPS 防止中间人攻击的核心,客户端需要对服务器发来的证书进行安全性校验。那么客户端是怎么校验证书的安全性呢?下面我们来讲解一下。 证书都是由权威的认证机构颁发的,并且这些认证机构办法的证书目前已经内置到了操作系统中(Windows 是这样,其他的操作系统不慎了解),这些证书被称为 CA 根证书。当我们的服务器需要使用 HTTPS 的时候,就需要将服务器生成的公钥和网站相关信息发给权威认证机构,然后权威认证机构通过服务器发送的相关信息用进行加签,由此得到了服务器证书,这个证书对应的生成证书内容的签名,并将该这个签名使用权威认证机构的私钥进行加密得到证书指纹,并且和上级证书生成关系链(上级证书最后都是 CA 根证书)。当客户端收到服务器发来的证书后,首先会通过层级关系找到上级证书,然后利用上级证书里的公钥解密服务器证书的证书指纹,解密后得到签名。然后通过签名算法算出服务器证书的签名,并对比两个签名是否一样,一样就说明服务器发来的证书是不存在问题的。这里证书校验用的 RSA 是通过私钥加密证书签名,公钥解密来巧妙的验证证书有效性的。通过 CA 认证体系就可以避免了中间人窃取 AES 密钥并发起拦截和修改 HTTP 通讯的报文。
三、总结

巧妙的验证证书有效性的。通过 CA 认证体系就可以避免了中间人窃取 AES 密钥并发起拦截和修改 HTTP 通讯的报文。

三、总结

这篇文章唠唠叨叨的讲了这么多关于 HTTP 和 HTTPS 的知识,看似很基础其实在很多时候我们发出去或接受到的数据不准确其实就是因为中间人攻击造成的,因此我们在开发部署网站的时候应该尽可能的使用 HTTPS 。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么 HTTPS 是安全的?
HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通讯报文如下:
民工哥
2020/09/15
9790
为什么 HTTPS 是安全的?
八、《图解HTTP》 - HTTPS
所谓的窃听是因为TCP/IP模型的物理层、数据链路层、网络层这几层所需要的设备支持都不可能是个人用户所具备的东西,所以在这几个环节进行通信窃听是完全有可能的。
阿东
2022/12/06
6710
八、《图解HTTP》 - HTTPS
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
心莱科技雪雁
2019/06/05
5090
为什么HTTPS比HTTP更安全?
详解http和https
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
SmallRoll小卷
2023/02/28
7390
详解http和https
HTTPS详细介绍
HTTP协议因为其轻、小、快、简单,所以在全世界普及开来,各种应用都离不开它。但是随着业务复杂度的提高,HTTP的这些优点逐渐成为了短板。所以就开始各种打补丁,比如因为HTTP是无状态的协议,所以为了管理状态而诞生的Cookie。这篇文章要说的是其中一个为了安全而诞生的超级补丁SSL(HTTPS)。
从入门到进错门
2019/08/14
8700
经得住拷问的HTTPS原理解析
HTTPS 是在 HTTP 和 TCP 之间建立了一个安全层,HTTP 与 TCP 通信的时候,必须先进过一个安全层,对数据包进行加密,然后将加密后的数据包传送给 TCP,相应的 TCP 必须将数据包解密,才能传给上面的 HTTP。
用户4456933
2021/06/01
7290
经得住拷问的HTTPS原理解析
白话HTTPS
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)的应用层传输协议。
叔牙
2021/12/11
1.7K1
白话HTTPS
https 是否真的安全,https攻击该如何防护,https可以被抓包吗?如何防止呢?
简单来说, https 是 http + ssl,对 http 通信内容进行加密,是HTTP的安全版,是使用TLS/SSL加密的HTTP协议
德迅云安全--陈琦琦
2023/11/26
1.1K0
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
HTTPS(Hypertext Transfer Protocol Secure)是一种安全的网络通信协议,它在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的安全基础是SSL/TLS协议,它存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统提供了身份验证与加密通讯方法,被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。由于HTTPS协议内容都是按照文本的方式明文传输的,就导致在传输过程中出现一些被篡改的情况。
枫叶丹
2024/07/12
1960
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
HTTP协议与HTTPS的加密流程
HTTP全称Hyper Text Transfer Protocol,即超文本传输协议。HTTP是一个应用层协议,可视为一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
烂猪皮
2020/12/15
1.6K0
【Linux|计算机网络】HTTPS工作原理与安全机制详解
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况。
用户11316056
2024/11/19
8280
【Linux|计算机网络】HTTPS工作原理与安全机制详解
Nginx(3)-创建 https 站点
使用对称加密,交易双方都使用同样钥匙,安全性得不到保证;每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。
懒人的小脑
2019/03/19
1.2K0
Nginx(3)-创建 https 站点
【计算机网络六】HTTPS协议原理
因为HTTP协议内容均是按照文本的方式进行明文传输的,这就导致在传输过程中很容易出现一些信息被篡改的情况。HTTPS协议通过在HTTP协议的基础上引入了一个加密层解决了这个问题。
小皮侠
2024/12/17
2381
【计算机网络六】HTTPS协议原理
【Linux网络#10】:Https协议原理
🔥 之前我们已经了解了 Http 协议,但是后面我也说道 Http 协议无论是 GET 还是 Post 方法传输数据。都是以明文进行传输,这意味着数据极易受到拦截和篡改。 而为了解决这一问题,HTTPS应运而生。本文将详细探讨HTTPS协议的工作原理、HTTP与HTTPS的区别、加密技术的应用以及如何通过证书认证保障安全通信
IsLand1314
2025/06/02
1600
【Linux网络#10】:Https协议原理
理解https中的安全及其实现原理
Google的一份网络上的 HTTPS 加密[1]透明报告(数据截至2022年1月)中指出HTTPS 连接的普及率在过去几年激增,互联网上排名前 100 位的非 Google 网站HTTPS 使用情况为:97%的站点默认启用HTTPS,100%的站点支持HTTPS。
你大哥
2022/03/14
6080
理解https中的安全及其实现原理
HTTPS终于搞懂了
近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。
捡田螺的小男孩
2023/02/22
1.1K0
HTTPS终于搞懂了
扯一扯HTTPS单向认证、双向认证、抓包原理、反抓包策略
HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层。这里提一下TCP/IP的分层共分为四层:应用层、传输层、网络层、数据链路层; 分层的目的是:分层能够解耦,动态替换层内协议
Android技术干货分享
2019/04/09
5.3K1
扯一扯HTTPS单向认证、双向认证、抓包原理、反抓包策略
谈谈HTTPS安全认证,抓包与反抓包策略
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议,即超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP协议是用于从万维网服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。众所周知,HTTP是一个无状态的应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
创译科技
2019/08/26
3.2K0
理解证书验证系列——HTTPS
这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。
mingjie
2022/05/12
9240
理解证书验证系列——HTTPS
【网络】应用层协议HTTP&&HTTPcookie与session&&HTTPS协议原理
虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一
用户10925563
2024/12/02
2980
【网络】应用层协议HTTP&&HTTPcookie与session&&HTTPS协议原理
相关推荐
为什么 HTTPS 是安全的?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档