HTTPS 加密原理
HTTPS 加密原理
- HTTPS 加密原理
- 常见的加密方法
- 单向加密
- 对称加密
- 非对称加密
- 为什么需要加密?
- 加密流程演变
- 对称加密
- 非对称加密
- 非对称加密+对称加密
- 存在问题
- 解决方式
- 数字证书
- 生成方式
- 整体流程
HTTPS 加密原理
常见的加密方法
单向加密
也称为不可逆加密,对明文产生一个密文,并且不能通过密文解出对应的明文。
使用场景:一般用于信息摘要,密钥加密等。
常见的单向加密算法有:
- MD5
- SHA:SHA192,SHA256
特点:
- 不可逆
- 输入一样,输出相同
对称加密
对称加密,用一个密钥,对明文进行加密,同理,同这把密钥,也可以对密文进行解密。也就是说加密和解密,可以用同一个密钥,这种加密方法就是对称加密。
常见的对称加密算法有:
- DES
- 3DES
- AES
特点:
4. 加密方和解密方使用同一个密钥
5. 加密解密速度比较快
非对称加密
使用公钥和私钥进行加密解密,可以使用私钥加密,公钥进行解密,同理也可以使用公钥加密,私钥进行解密。
常见的非对称加密算法有:
- RSA
- DSA
特点:
- 使用两把密钥进行加密和解密,即公钥和私钥。
- 公钥加密私钥解密,私钥加密公钥可以解密。
- 加密或者解密,速度非常慢。
- 私钥和公钥是成对出现的。
为什么需要加密?
HTTP 的内容是明文传输的,数据传输的过程会经过中间代理服务器、路由器、WiFi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,那么传输的内容就完全暴露了,甚至劫持者还可以篡改信息而不被通信双方察觉,这就是中间人攻击。所以我们需要对传输的内容进行加密。
加密流程演变
对称加密
首先可以想到的就是对称加密,对称加密速度较快,通信过程中对信息进行加密解密的开销不大,只要通信双方约定好一个密钥,之后每次传输的时候都采用这个密钥进行加密解密即可。
但是这其中存在一个问题,就是双方如何约定一个仅双方知晓的密钥。如果服务器生成后传输给浏览器,那么这个密钥仍有被劫持的可能,那么后续的加密显然就失效了。所以我们将对称加密用于数据传输,但需要一种安全的方式保证对称加密的密钥传输。
非对称加密
非对称加密采用公钥和私钥两把密钥,服务端将公钥发送给客户端,之后客户端每次传输数据之前都先采用公钥对要传输的数据进行加密,这样就保证了客户端到服务器端信息的安全,因为只有持有私钥的服务端才可以解密出客户端所发送的数据。
但是服务器端发送的数据却是无法保证的,因为公钥是公开的,那么其他人就可以截获并解密出服务端发给客户端的数据。
一组公钥私钥可以解决单向的安全,那么其实用两组公钥私钥也可以保证传输的安全,但是非对称加密的效率低。
- 某网站服务器拥有公钥A与对应的私钥A’;浏览器拥有公钥B与对应的私钥B’。
- 浏览器把公钥B明文传输给服务器。
- 服务器把公钥A明文给传输浏览器。
- 之后浏览器向服务器传输的内容都用公钥A加密,服务器收到后用私钥A’解密。由于只有服务器拥有私钥A’,所以能保证这条数据的安全。
- 同理,服务器向浏览器传输的内容都用公钥B加密,浏览器收到后用私钥B’解密。同上也可以保证这条数据的安全。
非对称加密+对称加密
既然非对称加密可以保证客户端发给服务端的信息只有服务端能读取,那么我们不难想到让客户端生成对称传输的密钥,然后用非对称加密中服务端发布的公钥对该密钥进行加密发给服务端,服务端收到之后用非对称加密中的私钥解密即可拿到对称加密的公钥。之后双方就可以采用这个密钥进行对称加密传输了。这样不仅保证了安全,效率也够高(相比于用两组公钥私钥进行数据的传输)。
存在问题
上面的方式看似安全,但其实还是存在一定的问题的。
服务端在发送公钥A给客户端时,如果被截取,那么攻击者可以把服务端本要发送给客户端的公钥A替换成自己生成的公钥B,这个操作对于客户端来说是不可得知的。那么后续客户端生成密钥X再加密发出时其实使用的就是攻击者生成的公钥B去进行加密的,那么攻击者就可以通过自己的私钥B’解密出客户端生成的对称加密密钥X,然后再用服务端的公钥A加密后返回给服务端。
那么后续双方通信的内容同样还是被攻击人所窃取了。
解决方式
其实之所以会存在这样的问题主要是因为服务端无法保证自己发出的公钥能够不被篡改地发送给客户端,即客户端不能确定接收到的公钥一定是服务端发送的。
如果按照之前的方式再次对公钥进行加密,那么加密的密钥的传输仍然还是重复上面的问题。所以在这里引入了第三方机构(CA机构)来解决这样的情况。
数字证书
网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了。
证书就如身份证,证明”该公钥对应该网站“。
当然这里还得保证证书本身的真实性,即防止证书本身在传输过程中被篡改。
数字证书组成部分:
- 服务端生成的公钥
- 颁发者(证书认证机构)
- 证书有效期
- 生成摘要的算法
- 指纹(摘要)
- 签名算法
- 序列号:证书的唯一标识
生成方式
数字签名的制作过程:
- CA机构拥有非对称加密的私钥和公钥。
- CA机构对证书明文数据T进行hash。
- 对hash后的值用私钥加密,得到数字签名S。
- 明文和数字签名共同组成了数字证书。
为什么需要对证书先进行哈希之后再加密?
因为非对称加密效率很差,而证书中包含的信息一般又比较长,所以先对证书进行哈希得到一个固定长度的值之后再进行加密可以有效降低耗时。
浏览器验证过程:
- 拿到证书得到明文T和数字签名S。
- 用CA机构的公钥对S解密(由于是浏览器信任的机构,所以浏览器保有它的公钥),得到S’。
- 用证书里指明的hash算法对明文T进行hash得到T’。
- 显然通过以上步骤,T’应当等于S‘,除非明文或签名被篡改。所以此时比较S’是否等于T’,等于则表明证书可信。
这里的核心其实就是在于浏览器保存有了CA机构的公钥,所以避免了这个公钥的传输导致的被篡改的可能。
其实这里的证书是操作系统和浏览器本身就会预装一些他们信任的根证书,如果其中有CA机构的根证书,就可以拿到它对应的可信公钥了。如果浏览器没有给这个网站颁发证书的机构的根证书,那么你就得手动下载安装该机构的根证书(风险自己承担)。安装后,你就有了它的公钥,就可以用它验证服务器发来的证书是否可信了。
因为签名是用CA机构的私钥加密得到的,攻击者即使篡改了数据,由于没有私钥也更改不了数字签名,那么最后验证时则会发现S‘和T’不相同的情况,说明证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
并且证书中还保存了网站的域名和信息等,如果攻击者用自己在CA机构申请的证书进行替换,则浏览器接收到证书时就会发现与当前访问的网站不同,从而也避免了证书被掉包的情况。
整体流程
- 网站提交相关信息申请证书。
- CA机构向证书中写入摘要算法、域名、网站公钥等信息,并通过摘要算法对证书进行哈希,之后用自己的私钥对摘要进行加密计算出签名。
- 将证书颁发给申请者,申请者将证书放到服务器。
- 浏览器访问网站,服务器将证书发送给浏览器。
- 浏览器根据自身保存或操作系统内置的CA证书拿到CA的公钥,通过其对签名进行解密得到摘要。
- 通过整数中的摘要算法对证书进行哈希,比较结果是否等于上一步得到的摘要。
- 如果不相等则证明证书被篡改,如果相等则通过证书验证,浏览器拿到服务端的公钥。
- 浏览器生成密钥并使用拿到的服务端公钥进行加密传输给服务端。
- 服务端使用私钥计算出密钥并将其存储在服务端内部(通过sessionID标识对应的浏览器)。
- 后续浏览器每次请求都携带sessionID,服务器会根据sessionID找到对应的密钥进行加密解密操作。
相关文章:
HTTPS 加密原理
HTTPS 加密原理 HTTPS 加密原理常见的加密方法单向加密对称加密非对称加密 为什么需要加密?加密流程演变对称加密非对称加密非对称加密对称加密 存在问题解决方式数字证书生成方式 整体流程 HTTPS 加密原理 常见的加密方法 单向加密 也称为不可逆加密,…...

【数据挖掘】实验4:数据探索
实验4:数据探索 一:实验目的与要求 1:熟悉和掌握数据探索,学习数据质量分类、数据特征分析和R语言的主要数据探索函数。 二:实验内容 1:数据质量分析 2:统计量分析 3:贡献度分析…...
PTA后缀式求值(整型版)
作者 周强 单位 青岛大学 我们人类习惯于书写“中缀式”,如 3 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?) 而计算机更加习惯“后缀式”(也叫“逆波兰式”ÿ…...
FPGA与以太网相关接口知识
一:一般硬件架构;(对于1000m网一般都使用普通io口,普通管脚能跑800M(正点技术说的))) 1:FPGA普通管脚——phy芯片(pcspma)——rg45 2:FPGA(GT)光口(利用fpga的GT,直接节约了phy芯片…...

使用git+ssh访问github,避免下载资源失败
一、创建github账户之后,记住注册邮箱和账户名 我的邮箱:yuanyan23mails.ucas.ac.cn 账户名:thekingofjumpshoot 下边的相关位置需要用自己的邮箱和用户名替代 二、输入本地生成秘钥和公钥命令,并且生成公私钥对 ssh-keygen …...
cookie、session和token的区别
引言 在当今的互联网时代,Web 应用程序的安全性和用户体验至关重要。身份验证和状态管理是构建安全、可靠的 Web 应用的核心部分。cookie、session、token都是常用的身份验证和状态管理机制。 Cookie 什么是 Cookie? Cookie 是存储在用户浏览器中的小…...

如何解决Layui后台接口返回数据,但是table.render不渲染表格数据的问题
我这边进行了pareData数据格式转换,response重新定义了layui的参数格式规范 接口正常返回了数据 但是就是不渲染,我这个郁闷啊!! 忽然,我把后台重新定义的layui规定的格式参数,有个参数名叫data࿰…...

matlab 将矩阵写入文件
目录 一、概述1、算法概述2、主要函数二、将矩阵写入到文本文件三、将矩阵写入电子表格文件四、将矩阵写入指定的工作表和范围五、将数据追加到电子表格六、将矩阵数据追加到文本文件七、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此…...

pandas的综合练习
事先说明: 由于每次都要导入库和处理中文乱码问题,我都是在最前面先写好,后面的代码就不在写了。要是copy到自己本地的话,就要把下面的代码也copy下。 # 准备工作import pandas as pd import numpy as np from matplotlib impor…...

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会
会议背景 随着全球对清洁能源的迫切需求,氢能能源转型、工业应用、交通运输等方面具有广阔前景,氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示,到2050年,绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…...
非插件方式为wordpress添加一个额外的编辑器
在WordPress中,要添加一个额外的区块编辑器(通常指的是Gutenberg区块编辑器中的一个自定义区块),你需要编写一些PHP代码来注册新的区块,并可能还需要一些JavaScript来处理前端的逻辑。下面是一个简单的示例,展示了如何注册一个自定…...

Spark Stage
Spark Stage 什么是Stage Spark中的一个Stage只不过是物理执行计划其中的一个步骤,它是物理执行计划的一个执行单元。一个Job会被拆分为多组Task,每组任务被称为一个Stage,可以简单理解为MapReduce里面的Map Stage, Reduce Stag…...

【国家计算机二级考试C语言.2024】学习备忘录
说明 分值 4060100 40分: 这里面有一大堆程序结果选这题,如果手速还可以。那遇到有疑问的情况就自己去倒计算器的ad E上面去打一打。能够跑出来,结果那是100%的没问题。 有些概念题比较讨厌,只能自己去记忆了。要去背诵熟熟的。…...
十分钟掌握redis精髓指令
编译安装 git clone https://gitee.com/mirrors/redis.git cd redis make make test make install # 默认安装在 /usr/local/bin # redis-server 是服务端程序 # redis-cli 是客户端程序启动 mkdir redis-data # 把redis文件夹下 redis.conf 拷贝到 redis-data # 修改 redis.…...
突然断电导致git损坏修复
背景 使用ide开发时突然断电启动后所有文件都成了没有提交的文件。打开git视图日志也消失不见 # git命令执行结果如下 git status No commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: .github/FUNDING.ymlnew …...
MATLAB入门指南:从零开始进行数学建模竞赛
第1部分:认识MATLAB 1.1 什么是MATLAB? MATLAB(Matrix Laboratory的缩写)是一个高性能的数值计算环境和第四代编程语言。由MathWorks公司开发,它提供了一个便捷的数学解决框架,主要用于算法开发、数据可视…...

【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理
目录 🚩volatile关键字 🎈volatile 不保证原子性 🎈synchronized 也能保证内存可见性 🎈Volatile与Synchronized比较 🚩wait和notify 🎈wait()方法 💻wait(参数)方法 🎈noti…...

GitHub配置SSH Key(详细版本)
GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是,不需要繁琐的验证过程,简化操作流程。比如新建的仓库可以下载, 但是提交需要账号密码。 步骤 一、设置git的user name和email 如果你是第一次使用,或者还没有配置过的话需要操作…...

JavaScript 权威指南第七版(GPT 重译)(六)
第十五章:JavaScript 在 Web 浏览器中 JavaScript 语言是在 1994 年创建的,旨在使 Web 浏览器显示的文档具有动态行为。自那时以来,该语言已经发生了显著的演变,与此同时,Web 平台的范围和功能也迅速增长。今天&#…...
Learning to summarize from human feedback
Abstract 人工参考总结以及 ROUGE 指标只是我们真实关心的目标(总结质量)的粗略代表。通过优化人工偏好来显著提升总结质量使用大量高质量的人类比较来训练一个模型来预测人类偏好的总结使用这个模型作为奖励函数对总结策略进行强化学习微调我们模型的效果在 TL;DR 数据集上显…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...