HTTP与HTTPS的区别、http1.0、http1.1、http2.0的区别

2023-12-03 23:38

本文主要是介绍HTTP与HTTPS的区别、http1.0、http1.1、http2.0的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HTTP与HTTPS的区别

https://juejin.cn/post/6844903990648389645#heading-8

http是一种超文本传输协议,是一种以明文的方式发送内容,没有任何的加密,如果我们访问一个网站,我们可能在这个网站上输入账号密码之类的操作,那么在账号和密码发送到服务器的过程中就有可能有人在中途截取信息。
为了解决http在传输过程中不加密的问题,在http协议的基础上又增加了ssl协议,这是一个提供数据安全和完整性的协议,也就是负责网络连接的加密。
比如我们访问了一个https的网站,我们的电脑就会和服务器先建立起一个安全的连接通道,然后服务器会发送一份网站的证书信息到我们的电脑,相当于告诉电脑,我们访问的服务器没问题。确认了信息之后,我们的服务器就会生成一个加锁的箱子,这把锁有两把不同的钥匙,一把是给我们电脑的(公钥),一把是给服务器的(私钥)。服务器会把公钥和未锁上的箱子给电脑,我们把信息放到箱子里,然后用公钥锁上再发给服务器,在这个过程中,即使箱子被拦截了,别人因为没有钥匙,也就无法打开箱子获取信息。服务器收到箱子后用私钥解开。


  • 对称加密:

A给B传输数据m,在传输的过程中+e(加密),B收到了数据c后,-e(解密),获得数据m。
加密操作可能更复杂,如m*e+s。

  • 非对称加密:

A把传输数据给B,B首先生成两个具有相关新的数字e(公钥)和d(私钥)。
B把e传给A(以公开的方式), A通过e公钥的某个算法(例如+e)得到一个c(密文),并把c传给B(以公开的方式)。
A收到密文c后,通过密文求解原文的过程不是-e,而是-d(私钥),解得m(明文)。
也就是说加密时用e(公钥)进行加密,解密时用d(私钥)进行解密。

就算你知道e(公钥)和c(密文),你也不知道私钥,无法解密而获得m(明文)。

  • 下面来介绍一种最典型的非对称加密方式:RSA加密算法
  1. 要求B找出两个质数p、q。
  2. n = p * q
  3. f(n) = (p - 1) * (q - 1) (欧拉函数)
  4. 找出公钥e,1 < e < f(n) 且 e和f(n)互斥,在这个条件内随便找一个整数即可。
    找出私钥d,使得e*d/f(n)后的余数为1。

传输的数据是m
加密:m^e / n 求余数c
解密:c^d / n 求余数m(可以证明这个余数一定是m)。

这种算法的安全性如何呢?
传输中可能被截取的数据有:n、e、c
解密需要的数据:n、d、c
黑客要想解密就得根据e求出d,已知公式:e*d/f(n)后的余数为1。所以得知道f(n),要知道f(n)就得先知道p、q,要知道p、q就得对n进行质因数分解。
大数的质因数分解是很困难的。
RSA算法常用的n是1024位的二进制数,目前想分解这么大的数,普通计算机需要计算十年,量子计算机需要计算七天,所以银行系统都会定期进行更新。


http和https的区别

  1. https协议要申请证书到ca,需要一定经济成本;
  2. 连接的端口不一样,http是80,https是443;
  3. http是无状态的、明文传输;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。

SSL四次握手的过程

  1. 客户端发出请求
    首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。

  2. 服务器回应
    服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。

  3. 客户端回应
    客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

  4. 服务器的最后回应
    服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。
    (1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

1: 客户端, 发起一个请求, 请求服务器的公钥(非对称加密的加密方式)
3: 服务器把服务器的公钥返回给客户端
4: 客户端, 用服务器的公钥加密自己的加密方式(浏览器对称加密)
5: 把自己经过加密(服务器公钥加密的) 自己加密的方式给服务器
6: 服务器开始解密,用私钥, 获得了浏览器的加密方式
7: 以后, 客户端就和服务器通过 浏览器的对称加密方式通信

http1.0、http1.1、http2.0的区别

面经
详解

这篇关于HTTP与HTTPS的区别、http1.0、http1.1、http2.0的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/451291

相关文章

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-