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

相关文章

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法