首页 > 其他分享 >架构与思维:了解Http 和 Https的区别(图文详解)

架构与思维:了解Http 和 Https的区别(图文详解)

时间:2024-06-11 09:14:40浏览次数:15  
标签:加密 Https Http 传输 HTTPS 服务器 HTTP 客户端 图文

1 介绍

随着 HTTPS 的不断普及和使用成本的下降,现阶段大部分的系统都已经开始用上 HTTPS 协议。 HTTPS 与 HTTP 相比, 主打的就是安全概念,相关的知识如 SSL 、非对称加密、 CA证书、数据完整性保护 等,我们多多少少也都有听过。 本文重点从原理上讲解 HTTPS 的安全性,以及同HTTP的比较说明。

2 HTTP和HTTPS的比较

HTTP(全称:HyperText Transfer Protocol,超文本传输协议)和HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议)都是互联网中用于数据传输的协议,它们在多个方面有着显著的差异和特点。

image

2.1 HTTP

HTTP(Hypertext Transfer Protocol),是一种发送和接收HTML页面的方法,主要用于Web浏览器和网站服务器之间传递信息。它的主要特点如下:

1. 基于请求响应模式: HTTP协议采用客户端-服务器架构模式,客户端向服务器发送请求,服务器返回相应的响应。这种模式能有效分离应用逻辑,提高系统的可维护性和扩展性。
2. 基于文本传输: HTTP协议使用ASCII码作为通信协议,每个请求和响应都是一条文本消息,这使得通信协议更加简单、直观、易于处理。
3. 支持多媒体传输: HTTP协议可以传输多种类型的数据,如HTML、XML、JSON、图片、音频、视频等,这使得HTTP协议成为一种通用的网络传输协议,适用于各种不同类型的应用场景。
4. 无连接: HTTP协议是一个无连接协议,每个请求都是独立的,服务器处理请求后立即关闭连接。这有助于节省资源,但也带来了一些缺点,如需要重新建立连接、重复发送相同的头部信息等。
5. 无状态: HTTP协议没有客户端的状态存储,也没有事务处理的“内存”能力。这意味着每次访问网站时可能需要重复的登录操作。

然而,HTTP协议也存在一些不足之处。由于它以明文方式发送内容,不提供任何方式的数据加密,因此安全性较差。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。因此,HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等支付信息。

2.2 HTTPS

与HTTP相比,HTTPS(Hypertext Transfer Protocol Secure)则是以安全为目标的HTTP通道。它在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的内容加密、身份验证以及数据完整性保护的原理主要依赖于SSL/TLS协议。下面我们详细来看看这几方面的实现原理。

2.2.1 内容加密

HTTPS使用对称加密和非对称加密相结合的方式来实现内容加密。

1. 对称加密:在密钥交换完成后,客户端和服务器会生成一个共享的会话密钥。这个会话密钥用于后续的加密和解密操作。双方使用这个会话密钥,通过对称加密算法(如AES)对传输的数据进行加密和解密,确保数据在传输过程中的安全性。

image

如上图,对称加密虽然保证了消息的保密性,但是因Client和Service共享一个密匙,这样就导致密匙特别容易泄露。

2. 非对称加密:在HTTPS的握手阶段,服务器会将其公钥发送给客户端。这个公钥用于后续的加密通信。客户端使用服务器的公钥加密一个随机数,然后将加密后的随机数发送给服务器。服务器使用其私钥解密这个随机数,从而确保双方都能安全地交换密钥,这个过程称为密钥交换。

image

如上图,

  • 非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不保密,可以截获客户端发来的消息,然后篡改形成攻击
  • 非对称加密的性能会慢上至少几倍,增加系统消耗。因此,Https将两种加密结合起来使用。

2.2.2 身份验证

HTTPS使用数字证书来验证服务器的身份。

1. 数字证书:数字证书是由权威的证书颁发机构(CA)颁发的,包含了服务器的公钥、服务器的身份信息以及CA的签名等信息。当客户端与服务器建立HTTPS连接时,服务器会将其数字证书发送给客户端。

2. 验证过程客户端收到服务器的数字证书后,会验证证书的合法性。首先,客户端会检查证书是否由受信任的CA颁发。然后,客户端会检查证书是否过期以及证书中的服务器身份信息是否与正在连接的服务器一致。最后,客户端会使用CA的公钥验证证书上的签名,确保证书在传输过程中没有被篡改。如果证书验证通过,客户端就可以确认服务器的身份是可信的。

image

2.2.3 数据完整性

HTTPS通过消息认证码(MAC)来确保数据的完整性。

1. 消息认证码:在HTTPS通信过程中,每个传输的数据包都会附带一个MAC值。这个MAC值是通过将数据包的内容和会话密钥一起输入到一个哈希函数中计算得出的。因此,只有持有相同会话密钥的接收方才能计算出正确的MAC值。

2. 完整性校验:当接收方收到数据包时,它会使用相同的会话密钥和哈希函数计算MAC值,并与数据包中附带的MAC值进行比较。如果两个MAC值相同,那么接收方就可以确认数据包在传输过程中没有被篡改,从而保证了数据的完整性和安全性。

image

2.2.4 端口

HTTP 默认使用 80 端口,而 HTTPS 默认使用 443 端口

2.2.5 性能

因为HTTPS 需要进行加密和解密操作,因此它的性能可能略低于 HTTP。但随着技术的发展,这种性能差距已经接近可以忽略。

3 总结

HTTP和HTTPS在差异方面,最显著的是安全性。HTTP是明文传输协议,而HTTPS是加密传输协议。这种加密特性使得HTTPS在传输敏感信息时更具优势。此外,浏览器地址展示方式也有所不同,Https有绿色安全锁标志,而http则有网站不安全标志提醒。在协议层面,HTTPS在HTTP的基础上加入了SSL安全认证证书,从而提供了更高级别的安全防护。在涉及敏感信息传输的场景中,如在线购物、银行业务等,基本都是用HTTPS协议进行数据传输。

标签:加密,Https,Http,传输,HTTPS,服务器,HTTP,客户端,图文
From: https://www.cnblogs.com/wzh2010/p/18115794

相关文章

  • 接口测试之Postman使用全图文指南
    接口测试之Postman使用全图文指南为什么要做接口测试?本文目录如下Postman简介为什么选择Postman?如何下载安装Postman?如何使用Postman?如何处理GET请求如何处理POST请求如何将请求参数化如何创建PostmanTests如何创建测试集合如何使用CollectionRunner运行集合如何使......
  • 推送代码报错:fatal: unable to access 'https://gitlab.com/xxx/xxx.git/': The reque
    错误还原#gitlab使用Bitbucket注册登录,执行gitpush命令,使用token验证报错如下dogle@DESKTOP-KI961IKMINGW64/d/workspaces/xxx(main)$gitpushremote:HTTPBasic:Accessdenied.Theprovidedpasswordortokenisincorrectoryouraccounthas2FAenabledan......
  • Serverless部署应用并使用Cloudflare加速和支持HTTPS
    ServerlessServerless是一种云计算模型,它使开发人员能够构建和运行应用程序,而无需关心底层的服务器基础设施。在传统的应用程序开发中,开发人员需要管理服务器的配置、扩展和维护等任务。而在Serverless模型中,这些任务都由云服务提供商来处理,开发人员只需专注于编写应用程序的......
  • Javaweb01-HTTP协议
    HTTP协议1.HTTP协议概述定义与作用HTTP是超文本传输协议,用于定义服务端和客户端之间交换数据的过程和数据本身的的格式,同时HTTP是一种请求/响应式的协议,是一种应用层的协议优点支持客户端和服务器模式简单快速,通过Http请求和Http响应加快通信允许传输任意类型的数据,......
  • HTTP与HTTPS的区别
    HTTP和HTTPS的主要区别体现在以下几个方面:1.安全性HTTP协议以明文方式发送内容,不提供任何方式的数据加密。这意味着如果攻击者截取了Web浏览器和网站服务器之间的传输报文,他们可以直接读懂其中的信息。相比之下,HTTPS协议则通过SSL/TLS协议进行加密传输,这种加密方式可以保护数据......
  • 【JavaWeb入门】了解HTTP
    HTTP协议简介超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wi......
  • 通过接口拿到代理,返回代理列表(只有http,无https)
    defget_proxies_list(num):res=requests.get(url=f"http://api.89ip.cn/tqdl.html?api=1&num={num*2}&port=&address=&isp=").textip_list=re_method(res,"<br>(.*?)<br>")proxies_list=[]foriin......
  • Could not find artifact com.mysql:mysql-connector-j:pom:8.0.36 in central (https
    遇到修改依赖项的MySQL版本结果说找不到依赖项解决方法确保MySQL版本正确降低依赖项的MySQL版本,修改后更新即可以我的MySQL版本举例,可以降低MySQL版本到依赖项支持的版本<dependency><groupId>com.mysql</groupId><artifactId>m......
  • 项目:基于httplib/消息队列负载均衡式在线OJ
    文章目录写在前面关于组件开源仓库和项目上线其他文档说明项目亮点使用技术和环境项目宏观结构模块实现compiler模块runner模块compile_run模块compile_server模块基于MVC结构的OJ服务什么是MVC?用户请求服务路由功能Model模块view模块Control模块写在前面关于组件......
  • HTTP客户端框架之Retrofit
    目录1HTTP客户端框架Retrofit1.1引言1.2简介1.3简单使用1.3.1引入依赖1.3.2定义http接口1.3.3注入使用1.4HTTP请求相关注解1.5配置项1.5.1配置讲解1.5.2配置示例1.6高级功能1.6.1自定义注入OkHttpClient1.6.2注解式拦截器1.6.2.1继承BasePathMatchInterceptor编写......