HTTP与HTTPS相关介绍(详细)

news2024/12/23 22:18:00

HTTP与HTTPS相关介绍

    • HTTP与HTTPS简述
    • HTTPS和HTTP的区别主要如下
    • HTTPS的工作原理
      • 前言
      • 工作步骤
      • 总结
    • HTTPS的缺点
    • SSL与TLS
      • SSL:
      • TLS:
      • TLS和SSL的关系
    • 对称加密与非对称加密
      • 对称加密
      • 非对称加密

HTTP与HTTPS简述

超文本传输协议(Hyper Text [Transfer Protocol](https://baike.baidu.com/item/Transfer Protocol/612755?fromModule=lemma_inlink),HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供数据加密,如果中间人截取了浏览器和服务器间的传输报文,就可以获得其中的信息,所以,HTTP协议不适合传输一些敏感信息。因此,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

HTTPS (Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

简单来说:

  • http 协议:不安全,未加密
  • https 协议:安全,对请求报文和响应报文做加密

HTTPS和HTTP的区别主要如下

  1. https协议需要到ca申请证书,一般免费证书较少,需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. http 和 https 使用的是完全不同的连接方式,用的端口也不一样,HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
  4. HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输,是无状态的。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进入加密报文传输。比http协议安全。

HTTPS的工作原理

前言

第一:HTTPS实现了加密通信,加密了通信,然后就可以安全通信了吗?

不能,不管是对称加密,还是非对称加密,都是明文传输,中间人都可以知道。

对称加密:传输的时候客服端发送时会把请求报文和秘钥一同发过去,中间人可以就会获得会话秘钥,从而篡改和截取数据。

非对称加密:公匙不是保密的,任何人都可以拿到,中间人也可以,中间人可以做两件事,第一,中间人可以在客户端与服务器交换公匙的时候,将服务端的公匙替换成自己的。这样客户端拿到的公匙将不是服务端的,而是中间人的。客户端无法判断正确性。第二件中间人可以不替换公匙,他可截获客户端的消息,篡改,然后用服务器的公匙加密发给服务器,服务器将说不到客户端正确的信息。
第二:如何解决不让中间人截获篡改数据呢。

引入公信机构CA,服务端把自己的公钥给 CA,让 CA 用 CA 的私钥加密,返回加密结果,然后用CA的公钥解密,就算中间人有CA的公钥,如果要篡改结果,必须再次用 CA 的私钥加密,但是中间人没法获取私钥,所以无法篡改。从而可使得我们传输自己的公钥时可以保证不会被篡改。

工作步骤

步骤图片

在这里插入图片描述

第一步:网站A 获取CA公信机构的认证证书

  • 首先要拥有自己的 公钥A私钥A

  • 在找认证机构 生成 网站A证书,获取到证书并保存在服务器中。

    证书包含的信息:

    • 网站的域名,证书有效期,⽤途、颁发者
    • 网站自己的公钥A

第二步:客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。客户端请求获取 网站A证书

**第三步:**Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

**第四步:**客户端自己操作系统内置的机构证书进行认证用 机构公钥 解密 网站A证书

  • 解密成功:获取 网站A公钥,只要解密成功,就说明 证书是机构认证的,证书是可信的,从而公钥就是可信的。
  • 解密失败:认证失败

第五步:需要客户端将自己对称加密算法生成的会话秘钥发给服务器

  • 使用对称加密算法生成会话秘钥B(对称加密密钥)。
  • 使用网站A公钥对会话秘钥B做加密,并发给服务器,服务器拿到了会话密钥,中间人没有所以,就无法截取和篡改内容了。

**最后一步:**这样就建立了通信,再然后再将要传输的明文通过会话密钥加密传输至服务器,然后服务器先前已经拿到了会话密钥并解密了。这样就解决非对称加密对于传输数据过大而导致的效低下的问题和对称加密的不安全问题。

总结

①. 在通信建⽴前采⽤⾮对称加密的⽅式,后续就不再使⽤⾮对称加密,使得中间人无法截取和篡改内容。

②. 在通信过程中全部使⽤对称加密的⽅式加密明⽂数据,因为中间人没有会话密钥。

③. 采⽤「混合加密」的⽅式的原因:

  1. 对称加密只使⽤⼀个密钥,运算速度快,密钥必须保密,⽆法做到安全的密钥交换。
  2. ⾮对称加密使⽤两个密钥:公钥和私钥,公钥可以任意分发⽽私钥保密,解决了密钥交换问题但速度慢。

HTTPS的缺点

  1. HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。

  2. HTTPS未经任何优化的情况下要比HTTP慢几百毫秒以上。

  3. HTTPS要额外计算,要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。、

  4. SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

  5. 大量的计算。SSL的每一个字节都涉及到较为复杂的计算。

SSL与TLS

SSL:

(Secure Socket Layer,安全套接字层)。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

安全套接层是Netscape公司率先采用的网络安全协议。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。如下:

(1)信息保密:通过使用公开密钥和对称密钥技术以达到信息保密。

(2)信息完整性:确保SSL业务全部达到目的。SSL利用机密共享和hash函数组提供信息完整性服务。

(3)双向认证:客户机和服务器相互识别的过程。它们的识别号用公开密钥编码,并在SSL握手时交换各自的识别号。为了验证证明持有者是其合法用户。

TLS:

(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。TLS是HTTP与TCP协议之间的一层,通常TLS发生在TCP三次握手之后,此时进行TLS四次握手,然后再进行HTTP通信。TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。

TLS包含三个基本阶段

  1. 对等协商支援的密钥算法
  2. 基于非对称密钥的信息传输加密和身份认证、基于PKI证书的身份认证
  3. 基于对称密钥的数据传输保密

TLS和SSL的关系

IETF将SSL标准化,即RFC 2246,并将其称为TLS(Transport Layer Security)。从技术上讲,TLS 1.0与SSL 3.0的差异非常微小。TLS 1.0是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。

TLS的主要目标是使SSL更安全,使协议规范更精确完善。 在SSL v3.0 的基础上,提供了增强内容:

  1. 更安全的MAC算法
  2. 更严密的警报
  3. “灰色区域”规范的更明确的定义

对称加密与非对称加密

对称加密

对称加密指的就是加密和解密使用同一个秘钥,所以叫对称加密。 对称加密只有一个秘钥,作为私钥。

加密过程:
加密: 原文+密钥 = 密文
解密:密文-密钥 = 原文

常见的对称加密算法: DES, AES, 3DES等

  • 特点:

    加解密使用 相同 秘钥 高效,适用于大量数据加密场景算法公开,安全性取决于秘钥大小,但秘钥越大效率越低,需要权衡在安全和效率中做权衡。

  • 缺点:

    算法本身安全,但使用场景不够安全,因为解密和加密都是同一个秘钥,密文如果被拦截,且密钥被劫持,那么信息很容易被破译。

非对称加密

  • 加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥,私匙只有自己可见。 公钥加密的信息,只有私钥才能解密。
    私钥加密的信息,只有公钥才能解密。
  • 使用公有密匙加密的消息,只有对应的私有密匙才能解开。反过来,使用私有密匙加密的消息,只有公有密匙才能解开。这样客户端在发送消息前,先用服务器的公匙对消息进行加密,服务器收到后再用自己的私匙进行解密。
  • 注意:公钥加密的数据 只能 用 对应的私钥解密,同理,私钥加密的数据 只能用 对应的公钥解密
  • 算法:RSA、ECC、Elgamal、背包算法、Rabin、D-H 等
  • 特点:安全性高
  • 缺点:加解密复杂,效率低,耗时较长
  • 用法概要:
    • 加密:对数据做加密
    • 签名:证明数据是谁发的

非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。正是因为如此,https将两种加密结合了起来。

借鉴文章:
https://blog.csdn.net/cxu123321/article/details/108830863
https://blog.csdn.net/amy_wang_1994/article/details/124837779
https://blog.csdn.net/qq_35642036/article/details/82788421
https://juejin.cn/post/7036551179517558791

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何无侵入地引入第三方组件?

做java开发的小伙伴都知道,java的生态比较繁荣,有各种各样的第三方组件来满足我们日常的开发需求。很多常用的中间件(redis,kafka等)都提供java的开发接口,而且这些接口通常会被封装成比较好用的组件来满足我们使用这些中间件的场…

SpringBoot集成MyBatis-yml自动化配置原理详解

SpringBoot集成MyBatis-yml自动化配置原理详解 简介:spring boot整合mybatis开发web系统目前来说是市面上主流的框架,每个Java程序和springboot mybatis相处的时间可谓是比和自己女朋友相处的时间都多,但是springboot mybatis并没有得到你的真…

RabbitMQ--详情概述

一、消息队列(Rabbit Message Queue) 1、概念 消息队列是一种应用之间的通信方式,消息发送之后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只发布消息到MQ,消息使用者值从MQ中拿消息,两者不知道对方的存在。 简…

Sentinel——限流规则

目录 快速入门 簇点链路 案例 流控模式 流控模式——关联 流控模式——链路 案例 流控效果 流控效果——warm-up 流控效果——排队等待 热点参数限流 快速入门 簇点链路 簇点链路:就是项目内的调用链路,链路中被监控的每个接口就是一个资源。…

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

[前端基础]异步操作(还没写完)

1.写在前面 这篇是因为最近再写异步操作,需要点总结 因为还在学习前端的过程中嘛,所以有些东西可能会慢慢补充上来,也可能会有很多个人理解不是很到位的地方,还望各位评论区佬能帮忙指出.阿里嘎多捏 2.异步操作的概念和举例 异步操作和同步操作在408的三门课程中,都有所提及…

基于php的校园垃圾分类网站的设计与实现

摘要 近年来,随着民众环保意识的增强和资源有效利用问题的重视,全国各地市不断推进垃圾分类工作。教育部,也已于去年发布通知在全国各学校推进垃圾分类工作,以鼓励垃圾分类的有效实施。但现阶段我国校园的垃圾分类践行情况依旧问…

STATS 782 - Control Flow and Functions

文章目录 一、Control Flow1. If-Then-Else2. Loops 二、Functions1. Defining Functions2. 使用函数计算数学公式 总结 一、Control Flow 1. If-Then-Else > if (x > 0) y sqrt(x) else y -sqrt(-x)或 > y if (x > 0) sqrt(x) else -sqrt(-x)2. Loops ① fo…

数组应该怎么用?

文章目录 前言一、数组是什么?二、数组的创建1.数组的创建:2.数组的初始化 三.数组的遍历1.逐个打印2.使用for循环四.二维数组1.语法:2.遍历 五.数组的一些常用方法1.数组转换字符串2.数组拷贝3.二分查找4.冒泡排序5.数组逆序 总结 前言 为什…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 原生方式,使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

_awt_container容器_演示

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。 方法签名方法功能setLocation(int x,int y)设置组件的位置setSize(int width,int heigth)设置组件的大小setBounds(int x,int y,int width,int heigth)设置组件的位置,大小。…

基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 目录 1 ACO-BP算法 2 ACO-BP算法基本思路 3 具体步骤 4 运行结果 ​ 5 参考文献 6 Matlab代码实现 1 ACO-BP算法 传统的…

数组模拟实现单链表快速操作

前言:我们都知道链表的一般模式是由结构体加指针来实现的,但是在实际的比赛中,结构体指针来实现链表的操作并不常用,原因是因为我们在增加节点时需要开辟新的内存,而比赛时给出的样例大多都是十几万个数据,…

安装配置SVN版本控制管理工具

SVN工具能帮我们做什么? 核心功能:文档版本管理系统 适合对象:个人与团队都可以使用,企业中项目资源的重要管理工具 举例:一个文件夹里面的文档管理 1.下载安装SVN服务器 VisualSVN-Server 2.下载安装SVN客户端 T…

【论文阅读】CVPR2023 IGEV-Stereo

用于立体匹配的迭代几何编码代价体 【cvhub导读】【paper】【code_openi】 代码是启智社区的镜像仓库,不需要魔法,点击这里注册 🚀贡献 1️⃣现有主流方法 基于代价滤波的方法和基于迭代优化的方法: 基于代价滤波的方法可以在c…

大小字母转换

1.代码实例: public class UpString { public static void main(String[] args) { if(args!null && args.length 1){ String str new String(args[0]); System.out.println(“原字符:” str “\n”); String newA str.toUpperCase(); System.out.prin…

C语言分支和循环语句

目录 1.什么是语句😊 2.分支语句(选择结构)😊 2.1 if语句🐾 2.2 switch语句🐾 3.循环语句 😊 3.1 while循环🐾 3.2 for循环🐾 3.3 do...while()循环&#x1f43e…

太太太太太卷了,累了

我们聊到互联网行业的时候,一个不可避免的话题就是“内卷” 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求&#xff…

C++内联函数的使用

1.内联函数概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用…

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…