https的原理和方案

news2024/12/24 21:49:05

文章目录

  • https原理
  • 为什么要加密
  • 常见的加密方式
    • 对称加密
    • 非对称加密
    • 数据摘要&&数据指纹
    • 数据签名
  • https的几种工作方案
    • 方案一:只使用对称加密
    • 方案二:只使用非对称加密
    • 方案三:两端都使用非对称加密
    • 方案四:非对称加密 + 对称加密
  • 针对上述情况的中间人攻击
  • 证书
    • CA认证
    • 理解数据签名
  • 方案5:非对称加密+对称加密+证书
  • 总流程

https原理

由于http协议内容都是按照文本方式明文传输的,这就会导致在传输过程中出现⼀些不安全的情况。

https也是⼀个应用层协,是在http协议的基础上引入了⼀个加密层

如果单纯的使用http协议,那么数据在网络传送中就以明文形式传送。如果http发送请求时,先经过 ssl/tls 的加密后再去传送,对方主机收到后再经过 ssl/tls 解密的过程就是https

https就相当于主机之间在应用层是明文的,但是在其他层是属于密文的

image-20230809153142111

可以通过端口号来决定数据是否加密,例如80是http,443是https

为什么要加密

因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间⼈攻击 ,所以才需要对信息进行加密

常见的加密方式

对称加密

采⽤单钥密码系统的加密方法,同⼀个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

特征:加密和解密所用的密钥是相同的 ,算法公开,计算量小,速度快,效率高

非对称加密

需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(publickey,简称公钥)和私有密钥(privatekey,简称私钥)

公钥可以加密也可以用来解私钥加密的密文,私钥可以加密也可以用来解公钥加密的密文

因此公钥和私钥是配对的,缺点是运算速度非常慢

数据摘要&&数据指纹

数据摘要也就是数据指纹,用来确定数据的唯一性

其原理是**利用单向散列函数(Hash函数)对信息进行运算,⽣成⼀串固定长度的数字摘要。数字指纹并不是⼀种加密机制,但可以用来判断数据有没有被窜改 **

和加密算法的区别是,摘要严格意义不是加密,是没有解密的,只不过从摘要很难反推原信息,通常用来进行数据对比

数据签名

对数据摘要再进行加密,就得到数字签名

https的几种工作方案

方案一:只使用对称加密

客户端和服务端都是使用同一个密钥进行加密解密,引⼊对称加密之后,即使数据被截获,由于中间人不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容了。

但是这种做法并不安全,因为服务器同⼀时刻其实是给很多客⼾端提供服务的,如果是相同密钥那就及其容易扩散,中间人也容易获取到。如果是每个客户端用的密钥都不一样,那服务器就需要维护每个客户端和每个密钥之间的关系,那这样的维护成本太大

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是什么,但是还有问题是因为密钥也要经过传输,但是如果密钥直接明文传输,中间人也很容易获取到,所以密钥进行加密,但是密钥加密的密钥也是如此。因为直接使用对称加密这种做法并不安全

方案二:只使用非对称加密

首先客户端向服务端申请公钥,服务端返回公钥给客户端,客户端使用公钥进行加密后传输,服务端接收到数据后用私钥解密处理数据后再用私钥加密返回。因为公钥和私钥是配对使用的,所以用公钥加密的数据必须得用私钥解密,私钥加密同理。

这种做法看似合理,实际上如果中间人在一开始客户端申请公钥使就已经开始劫持了,那中间人就会获取到公钥并篡改公钥,所以这种做法也不安全

方案三:两端都使用非对称加密

  1. 服务端拥有自己的公钥S与对应的私钥S’,客户端拥有自己公钥C与对应的私钥C’
  2. 客户端和服务端交换公钥
  3. 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
  4. 服务端给客⼾端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C’

这种做法看似可以,实际上这种做法的效率非常低,并且和方案二一样中间人可以在两端交换公钥的时候就进行劫持并篡改,也并不安全

方案四:非对称加密 + 对称加密

因为非对称加密的效率很低,所以可以配合对称加密使用

  1. 服务端具有非对称公钥S和私钥S’
  2. 客户端发起https请求,获取服务端公钥S
  3. 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器.
  4. 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥
  5. 服务器通过私钥S’解密,还原出客⼾端发送的对称密钥C.并且使用这个对称密钥加密给客户端返回的响应数据.
  6. 后续客户端和服务器的通信都只用对称加密即可。由于该密钥只有客⼾端和服务器两个主机知道,其他设备不知道密钥即使截获数据也没有意义

也就是说这种做法是利用对称加密的密钥来给非对称加密的公钥进行加密传输,这样除了一开始是使用非对称加密外后面都是使用对称加密进行加密的。但是这种做法也不安全

还是一样的道理,如果中间人一开始就劫持了公钥那后面再怎么传输都离不开中间人的角色了

针对上述情况的中间人攻击

上述的方案二 三 四都是出现在了一个问题上,那就是如果一开始中间人就获取到了公钥。

一旦中间人获取到了就可以:

  1. 服务器具有非对称加密算法的公钥S,私钥S’
  2. 中间⼈具有非对称加密算法的公钥M,私钥M’
  3. 客户端向服务器发起请求,服务器明文传送公钥S给客户端
  4. 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客⼾端
  5. 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器
  6. 中间人劫持后,直接用自己的私钥M’进性解密,得到通信秘钥X,再用曾经保存的服务端公钥S加密后,将报文推送给服务器
  7. 服务器拿到报文,用自己的私钥S’解密,得到通信秘钥X
  8. 双方开始采用X进行对称加密,进行通信。但是⼀切都在中间人的掌握中,劫持数据,进性窃甚至修改,都是可以的

因此为了解决这种情况就要引入证书

证书

CA认证

服务端在使用HTTPS前,需要向CA机构申领⼀份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性

一个证书里面包含了:数据的签名和明文信息。其中明文信息里包含了:证书发布机构,证书有效期,公钥等

需要注意的是:**申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对⼉就是⽤来在⽹络通信中进行明文加密以及数字签名的 **

https://myssl.com/csr_create.html

理解数据签名

签名的形成是基于非对称加密算法的

  1. CA机构拥有非对称加密的私钥A和公钥A’
  2. CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
  3. 然后对数据摘要用CA私钥A’加密,得到数字签名S

服务端申请的证书明文和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了

方案5:非对称加密+对称加密+证书

在客户端和服务器刚⼀建立连接的时候,服务器给客户端返回⼀个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息

每次的通信传输都需要进行证书认证:

  1. 判定证书的有效期是否过期
  2. 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
  3. **验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(称为数据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对比hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的 **

假设中间人获取到了证书:

  1. 中间人篡改了证书的明文
  2. 由于他没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
  3. 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人

那如果中间人掉包了证书呢:

  1. 因为中间人没有CA私钥,所以⽆法制作假的证书
  2. 所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包
  3. 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
  4. 永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的

因此这种方法是可取的。

总流程

image-20230810205534607

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

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

相关文章

2023年十款开源测试开发工具推荐

1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务,微服务 API 做功能和性能一体化的自动化测试平台,一站式提供发布单元,API,环境,用例,前置条件,场景,计划&#x…

计算机工作原理:进程调度

在计算机中,什么是进程?一个跑起来的程序就是一个进程,没跑起来就只能算一个程序。 在windows的任务管理器中,可以很清楚的看到有哪一些进程。 进程(progress)也叫任务(task)。 每…

C语言进阶第二课-----------指针的进阶----------升级版

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

腾讯云服务器配置选择方法

腾讯云服务器配置如何选择?CPU内存、带宽和系统盘怎么选择合适?个人用户可以选择轻量应用服务器,企业用户可以选择云服务器CVM,2核2G3M带宽轻量服务器95元一年、2核4G5M服务器168元一年,企业用户可以选择标准型S5云服务…

Gitlab CI/CD笔记-第二天-使用maven打包并且使用主机套接字进行构建并push镜像。

一、安装gitlab-runner 1.可以是linux也可以是docker的 2.本文说的是docker安装部署的。 二、直接上.gitlab-ci.yml stages: # List of stages for jobs, and their order of execution - build-image build-image-job: stage: build-image image: harbor.com:543/docke…

UEFI: 模块和包概述

UEFI规范中有两个最重要的概念:模块(Module)和包(Package)。 模块 Module UEFI上最小的可单独编译的代码单元,或者是预编译的二进制文件比如efi执行文件。 包 Package 由模块、平台描述文件(DSC)和包声明…

Leecode长度最小的子数组_209

209.长度最小的子数组 题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成…

exchange partition global index

EXCHANGE PARTITION with a Table having a UNIQUE INDEX and PK Constraint. (Doc ID 1620636.1)​编辑To Bottom In this Document Symptoms Changes Cause Solution References APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.3 and later Oracle Da…

day16:static、final、常量、抽象类

一、static 静态变量能否继承? 静态变量属于类,是共享的资源,不认为是被继承的 静态变量不可以定义在静态方法中, 静态方法中先于对象存在, 不能使用 this super 静态方法中可以直接调用静态方法。 静态方法不能直…

MySQL中基础查询语句

用户表user数据如下: iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543famale20北京大学Deijing42315female 23 浙江大学ZheJiang55432male25山东大学Shandong 1,写出ddl语句创建如上表,…

idea更改背景-给idea设置个性化背景

一,具体操作 按两次键盘Shift,打开快速查找/搜索功能 输入setb 选择Set Backgrounf Image 选择本地图片 二,推荐图片网站 Awesome Wallpapers - wallhaven.cc 该网站拥有大量免费高清图片可以白嫖

国内10大云服务器厂商,你用过几个?

国内排名前10的云服务器厂商如下: 1、阿里云。阿里云是国内最大的云计算服务商之一,其云服务器产品具有高可用性、高扩展性和高安全性等优势,深受广大用户的青睐。 2、腾讯云。腾讯云是国内领先的云计算服务商之一,其云服务器产品…

腾讯云轻量应用服务器端口打开方法

腾讯云轻量应用服务器端口放行在哪设置?在防火墙中可以开启端口号,腾讯云轻量应用服务器端口怎么开通?在轻量服务器管理控制台的防火墙中开启端口,如果是CVM云服务器在安全组中开通,腾讯云服务器网以轻量应用服务器开通…

C++——命名空间、输入、输出

在我们接触C之前,C语言中有时候会有使用全局变量,全局变量在使用过程中可能会发生冲突,这个冲突有时会是我们与库之间的冲突,有时又会是我们自己定义的之间的冲突,那么这时候命名空间的出现将很好的解决这个问题&#…

美国访问学者签证怎么样申请成功率高?

近年来,越来越多的人选择申请美国访问学者签证,以便在美国深造、交流学术知识以及拓展国际视野。那么,如何提高申请美国访问学者签证的成功率呢?以下是知识人网小编整理的一些成功申请的建议供您参考。 1.提前准备:提交…

Vue--》打造个性化医疗服务的医院预约系统(五)

今天开始使用 vue3 + ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关…

Javascript进阶[面向对象编程]

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。…

【MySQL】MySQL 数据类型

目录 1. tinyint 类型 2. bit 类型 3. 小数类型 1、float 类型 2、decimal 类型 3. 字符串类型 1、char 类型 2、varchar 类型 4. 日期类型 5. enum和set 1、枚举和集合类型语法 2、枚举和集合类型的查找 6、find_in_set 函数 写在最后: 1. tinyint …

关于Java反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解…

MyBatis Plus-个人笔记

前言 学习视频 尚硅谷-Mybatis-Plus教程学习主要内容 本文章记录尚硅谷-Mybatis-Plus教程内容,只是作为自己学习笔记,如有侵扰请联系删除 一、MyBatis-Plus简介 1、简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具&#…