从HTTP到HTTPS

简介: 从HTTP到HTTPS

一、HTTP Begin

1、什么是 HTTP

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

image.png

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


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

image.png

请求行包含请求方法、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 版本、服务器回发响应状态码和状态码文本描述组成。这里要说一下响应状态码,状态码类型如下表所示:

image.png

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

image.png

2、HTTP 致命缺点

HTTP 有一个致命的缺点,就是 HTTP 的报文都是以明文的方式进行传输,这样就会导致中间人攻击问题。什么是中间人攻击了,下面我们通过图文的形式讲一下。

A 在客户端向服务器发送了一句话“我今天很好”,这时在数据还没有到达服务器的时候被 B 拦截到,B 将发送的内容改为“我昨天很好”并发送给服务器,最后服务器接收到的信息就是“我昨天很好”而不是“我今天很好”。在这里 B 就是中间人,B 所执行的所有操作就叫做中间人攻击,一图胜千言我们来看图。

image.png

3、HTTP 预防致命缺点手段

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


  • 对称加密

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

image.png

image.png

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

image.png

  • 非对称加密

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

image.png

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

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


二、HTTPS End

1.什么是 HTTPS

HTTPS 就是 HTTP 和 TLS 的简称,以前的 HTTPS 使用的是 SSL ,现在的 HTTPS 使用的是 SSL 。TLS 整体上来说和非对称加密是一样的,主要是对 AES 密钥加密的。简单来说就是 A 发送一条信息给服务器告诉服务器我要和你通信,然后服务器返回 TLS/SSL 证数,客户端在收到证书后校验证书的有效性,如果证书有效就生成生成 AES 密钥并用证书中的公钥加密,然后发送给服务器。服务器确认收到后,就可以利用 AES 密钥进行加密通信了。


2.关于 CA 认证体系

CA 认证体系是 HTTPS 防止中间人攻击的核心,客户端需要对服务器发来的证书进行安全性校验。那么客户端是怎么校验证书的安全性呢?下面我们来讲解一下。


证书都是由权威的认证机构颁发的,并且这些认证机构办法的证书目前已经内置到了操作系统中(Windows 是这样,其他的操作系统不慎了解),这些证书被称为 CA 根证书。当我们的服务器需要使用 HTTPS 的时候,就需要将服务器生成的公钥和网站相关信息发给权威认证机构,然后权威认证机构通过服务器发送的相关信息用进行加签,由此得到了服务器证书,这个证书对应的生成证书内容的签名,并将该这个签名使用权威认证机构的私钥进行加密得到证书指纹,并且和上级证书生成关系链(上级证书最后都是 CA 根证书)。当客户端收到服务器发来的证书后,首先会通过层级关系找到上级证书,然后利用上级证书里的公钥解密服务器证书的证书指纹,解密后得到签名。然后通过签名算法算出服务器证书的签名,并对比两个签名是否一样,一样就说明服务器发来的证书是不存在问题的。这里证书校验用的 RSA 是通过私钥加密证书签名,公钥解密来巧妙的验证证书有效性的。通过 CA 认证体系就可以避免了中间人窃取 AES 密钥并发起拦截和修改 HTTP 通讯的报文。


三、总结

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


三、总结

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

————————————————

版权声明:本文为CSDN博主「喵叔哟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/gangzhucoll/article/details/111022583


目录
相关文章
|
1月前
|
缓存 安全 网络协议
一起深入了解http和https的区别
HTTP适合于非敏感信息的传输,而HTTPS则是在要求安全性、隐私保护及信任机制的现代互联网环境中不可或缺的标准配置。随着网络安全意识的提高和技术的发展,越来越多的网站和服务都转向使用HTTPS,力求在提供便捷服务的同时保障用户数据的安全。HTTPS将成为未来的基本选择。
41 0
一起深入了解http和https的区别
|
5天前
|
网络协议 网络安全 数据安全/隐私保护
http和https的区别!
http和https的区别!
|
8天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
9 0
|
11天前
|
缓存 安全 网络协议
【面试必备】HTTP和HTTPS是什么?有什么差异?
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。
18 2
|
27天前
|
前端开发 应用服务中间件 网络安全
http转为https,ssl证书安装及nginx配置
http转为https,ssl证书安装及nginx配置
43 1
|
27天前
|
安全 数据安全/隐私保护
深入解析:HTTP和HTTPS的三次握手与四次挥手
在这些握手和挥手过程中,双方交换信息,协商参数,建立或关闭连接,以保证数据的可靠传输。HTTPS在此基础上加入了数字证书验证和加密通信,增加了安全性。这些步骤确保了HTTP和HTTPS协议的通信过程的稳定和安全。
115 0
|
1月前
|
数据采集 缓存 前端开发
http和https请求服务器的时候在请求头部分都带什么到服务器呢?
HTTP和HTTPS请求头基本结构相似,HTTPS多了一层SSL/TLS加密。常见请求头如Accept(指定内容类型)、Authorization(身份验证)、Cookie(会话跟踪)、User-Agent(标识用户代理)等。HTTPS特有的头包括Upgrade-Insecure-Requests(升级到HTTPS)、Strict-Transport-Security(强制使用HTTPS)、Sec-Fetch-*(安全策略)和X-Content-Type-Options、X-Frame-Options等(增强安全性)。实际应用中,请求头会根据需求和安全策略变化。
20 0
|
1月前
|
机器学习/深度学习 人工智能 监控
视觉智能平台常见问题之http转https便捷的转换如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
21 0
|
1月前
|
安全 算法 网络协议
一文搞懂HTTP与HTTPS
一文搞懂HTTP与HTTPS
|
1月前
|
存储 缓存 安全
https跳过SSL认证时是不是就是不加密的,相当于http?
https跳过SSL认证时是不是就是不加密的,相当于http?
121 0