当前位置: 首页 > article >正文

HTTPS加密原理详解

目录

HTTPS是什么

加密是什么

HTTPS的工作流程

1.使用对称加密

2.引入非对称加密

3.引入证书机制

客户端验证证书真伪的过程

 签名的加密流程

整体工作流程

总结


HTTPS是什么

HTTPS协议也是一个应用程协议,是在HTTP的基础上加入了一个加密层,由于HTTP协议内容都是明文传输,就会导致在传输的过程中被黑客篡改。就比如,有时我们在一些软件下载的网站上明明下载的是网站图片上的软件但是真真下载的却是另一个软件。HTTPS就是进一步保证用户的信息安全。

加密是什么

加密就是把明文(要传输的信息)转化为密文(加密后的明文),解密就是将密文再转化为明文,中间进行这个转化工作的就是密钥,大概可以理解为,我们现在有一个日记,这个日记就是明文,然后我们为了不让别人看到这本日记,就将这个日记放到盒子中给锁起来,现在这个盒子连同里面的日记就是密文,这个锁就是密钥

对称加密

对称加密就是加密解密都是通过同一个密钥,客户端通过这个密钥将明文变成密文,服务器也通过这个密钥将密文变成明文,可以理解为一把锁就只有一个钥匙,把锁锁住使用这把钥匙,把锁打开也使用这把钥匙。

非对称加密

非对称加密需要两个密钥,一把叫做"公钥",另一把叫做"私钥"

如果通过公钥对明文加密,就通过私钥对密文解密,如果通过私钥对明文加密,那么就通过公钥对密文解密。可以理解为一把锁有两个钥匙,这两个钥匙有一个特点,如果使用其中一把钥匙把锁锁上就要用另一把钥匙把锁打开。

但是非对称加密的运行速度比对称加密慢得多

HTTPS的工作流程

1.使用对称加密

使用对称加密后,当黑客再次截取传输的信息时,因为没有密钥,所以就无法直接看到明文。

但是虽然这样看起来非常完美但是却给服务器带来不小的负担,因为一般一台服务器会同时服务多名用户,就需要服务器维护每名用户和其对应密钥的关系。所以为了减小服务器的负担,我们可以在双方建立联系的时候,协商好这次的密钥是啥,这样在每次建立联系时来确定此次密钥,服务器就不用再去维护用户和对应密钥的关系了。

//其实就是将密钥从服务器自己管理,变成每次连接由客户端告诉服务器密钥是什么

不过显然还有一个不合理的点,就是客户端在告诉服务器密钥是什么时,如果直接明文传输不就相当于是在""挑衅黑客""吗,演都不演了。所以我们要对密钥进行加密。

但是如果还使用对称加密,那么就需要再协商一个密钥的密钥,那么这个密钥的密钥肯定也不能直接明文传输,那就又有了一个密钥的密钥的密钥,这样循环套娃永远解决不了问题。 所以此时就不能使用对称加密了。而要使用非对称加密来对密钥进行加密

2.引入非对称加密

  1. 首先客户端在本地生成对称密钥,通过公钥加密,发送给服务器
  2. 中间黑客截获到密钥后由于没有私钥所以无法解密
  3. 服务器接收到后通过私钥进行解密,确认客户端发来的对称密钥
  4. 服务器使用接收到的对称密钥,对响应信息进行加密返回给客户端
  5. 客户端接收到响应后,后续双方的通信都通过这个对称密钥加密即可。由于对称加密的效率要比非对称加密高很多,所以只在最开始加密对称密钥时使用非对称加密。后续依然使用对称加密,因为这个密钥只有通信双方知道。

 

不过又有一个问题,公钥私钥怎么来呢?而且客户端的公钥并不是自己生成的而是由,服务器给的,那么客户端又怎么确认自己的这把公钥是服务器给的,而不是黑客从中截取替换的呢?

3.引入证书机制

这时如果有一个第三方的公正机构来证明的话不就好了,所以就引入了证书机制,证书就相当于是一个第三方的公证人,当客户端看到这个证书时就能确保自己收到的信息是真的。

在客户端和服务器刚建立连接时,服务器就会给客户端返回一个证书,这个证书不仅用来验证身份还包含了刚刚的公钥。

这个证书就好比是网站的身份证,虽然叫证书,但是其实是一个起到证书作用的结构化的字符串,里面会包含许多信息比如,证书的颁发机构(第三方),证书有效期,公钥,网站信息,签名等等

//(搭建一个HTTPS网站要在CA机构先申请一个证书,就像是给网站办理一个身份证)

客户端验证证书真伪的过程

  1. 判定证书的有效期是否过期
  2. 判断证书的颁发机构是否可信(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥)
  3. 判断证书是否被篡改,虽然我们认为证书是可信的但是还是有可能会被黑客截获进而篡改,所以我们要判定收到的这个证书是否被篡改,首先从操作系统中拿到证书发布机构的公钥(已内置在系统中),对签名进行解密,拿到数据摘要(一个hash值命名为hash1),然后计算整个证书的hash值,计为hash2,对比hash1和hash2是否相等,如果相等就表示证书没有被篡改过 

//在系统中已经提前内置了证书的公钥,这个公钥可以对证书中的签名进行解密(不是服务器给的加密对称密钥的公钥),证书里的签名就相当于是一个防伪标识,这是一个hash值,这个hash值是由整个证书计算得来,所以只要黑客篡改了证书的内容,客户端那边计算出的证书的hash值就会发生变化,然后和签名一比对就能知道证书是否可靠了。

//常见的生成签名的算法有MD5和SHA

 签名的加密流程

如果直接把签名用明文传输,那么当黑客拿到证书时就能看到一个正确的hash值是什么样的,进而就可以进行伪造,所以对于签名我们也要进行一层加密。

  • 当公证机构把证书颁发给服务器时,还会给服务器一个私钥,这个私钥就是用来加密证书的。
  • 然后这个私钥所对应的公钥,内置在客户端的系统中(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥),客户端在拿到证书时就直接使用这把公钥对签名进行解密,最后比对。

整体工作流程

准备工作:客户端系统内内置了解密证书签名的CA证书给的公钥1,服务器申请证书获得用于加密签名的私钥1,并且服务器自己生成公钥2,私钥2

申请建立连接阶段:客户端发起连接请求,服务器收到连接请求后返回证书,并把公钥2放入证书同时计算证书的签名(hash值)使用私钥1进行加密。客户端收到证书后,用公钥1获取签名验证证书的合法性,确认合法后获取证书中的公钥2。

商讨对称密钥阶段:客户端生成对称密钥,并使用公钥2给对称密钥加密发送给服务器,服务器收到请求后,使用自己的私钥2解密,获得对称密钥,并返回使用这个对称密钥加密的响应。

后续业务交流阶段:客户端使用对称密钥加密请求,服务器收到请求后使用对称密钥解密,并返回用对称密钥加密的响应,客户端接受响应后,再使用对称密钥解密确认响应内容

总结

HTTPS的工作流程主要用到了三次加密,一次对称加密和两次非对称加密

第一次非对称加密:用于校验证书是否被篡改,公钥在客户端系统中内置,私钥由公证机构给服务器,服务器用私钥对签名加密,客户端用公钥对签名解密来确认证书的合法性

第二次非对称加密:用于协商生成对称加密的密钥,公钥私钥都由服务器生成,公钥通过证书传递给客户端,客户端用这个公钥给对称密钥加密,服务器用私钥给对称密钥解密

对称加密:其实前两次的非对称加密都是为了解决对称加密遇到的问题,因为对称加密的运行效率要比非对称加密快得多,所以后于业务请求都用对称加密,非对称加密就是为了让对称密钥安全的到达服务器手上

以上就是博主对HTTPS知识的分享,在之后的博客中会陆续分享有关HTTPS的其他知识,如果有不懂的或者有其他见解的欢迎在下方评论或者私信博主,也希望可以多多支持博主的其他博客!!🥰🥰

相关文章:

HTTPS加密原理详解

目录 HTTPS是什么 加密是什么 HTTPS的工作流程 1.使用对称加密 2.引入非对称加密 3.引入证书机制 客户端验证证书真伪的过程 签名的加密流程 整体工作流程 总结 HTTPS是什么 HTTPS协议也是一个应用程协议,是在HTTP的基础上加入了一个加密层,由…...

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…...

安装pyqt6出现的问题

安装PyQt6报错: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: C:\\Users\\xyj19\\AppData\\Local\\Temp\\tmp3xfmekh7 [end of output] note: This error originates from a subprocess, and is likely not a pr…...

java调用c++

VScode 配置java 并且使用JNA调用c 动态库 安装 Java 开发环境 ​ 安装 JDK官网直接下载就好,推荐镜像下载 通过网盘分享的文件:jdk-8u144-windows-x64.exe​ 链接: https://pan.baidu.com/s/1Ov9bJkPNnOgcliBL-PSTFQ?pwdpg43 提取码: pg43 ​ 直接安…...

gitlab+jenkins+harbor+k8s安装操作流程之Jenkins

准备环境 一台centos7系统 4C/8G/100G 如果是jenkins2.5以上版本需要centos8以上版本 JDK1.8编译安装(最新版本jdk需要18以上) MAVEN编译安装 GIT编译安装 JDK1.8步骤 tar -zxvf 解压 vim /etc/profile export JAVA_HOME/data/jdk1.8.0_111 export JRE_HOME$JAVA…...

【机械视觉】C#+VisionPro联合编程———【三、加载CogToolBlock工具详解,以及实例】

【机械视觉】C#VisionPro联合编程———【三、加载CogToolBlock工具详解,以及实例】 在VisionPro中,CogToolBlock 是一种容器工具,可以将多个视觉工具(如CogBlob、CogPMAlign等)组合成一个可复用的流程。通过C#与Visi…...

Android14 串口控制是能wifi adb实现简介

Android14 串口控制是能wifi adb实现简介 一、前言 文章目录 Android14 串口控制是能wifi adb实现简介一、前言二、Android14 串口控制是能wifi adb实现1、设置prop属性命令开启adb(1)相关prop属性设置(2)在设置界面或者 ifconfi…...

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

问题:启动wsl里的Ubuntu24报错 报错信息: 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件,并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息,请访…...

常用AI工具推荐

AI对话相关 Deepseek https://chat.deepseek.com/ Kimi https://kimi.moonshot.cn/ 豆包 https://www.doubao.com/ 文心一言 https://yiyan.baidu.com/ 腾讯元宝 https://yuanbao.tencent.com 通义千问 https://tongyi.aliyun.com/qianwen/ 图片生成相关 即梦 https://jimen…...

用AI学编程3——Java学习1

一个Java文件, 整理出Java从入门到精通的所有知识点, 给出注释, 给出这样的Java文件 Java 学习整合文件 /*** Java 学习整合文件* 包含 Java 从入门到精通的主要知识点,包括基础语法、面向对象编程、异常处理、集合框架、多线程…...

如何监控 Pod 的 CPU/内存使用率,prometheus+grafana

一、监控 Pod 的 CPU/内存使用率的方法 1. 使用 kubectl top 命令&#xff08;临时检查&#xff09; # 查看所有 Pod 的资源使用率&#xff08;需安装 Metrics Server&#xff09; kubectl top pods --all-namespaces ​ # 查看指定命名空间的 Pod kubectl top pods -n <n…...

云服务器Linux安装Docker

系统要求 Docker 官方建议将 Docker 运行在 Linux系统上&#xff0c;当然也可以在其他平台运行&#xff0c;本篇博客只介绍在 Linux 系统上的安装方法。 Docker 运行在 CentOS7.X 版本以上&#xff0c;本文使用阿里云 ECS 云服务器 CentOS 7.4 版本。 Docker 需要安装在 64 …...

信息安全与网络安全的区别_信息安全与网络安全之差异探析

在当今数字化时代&#xff0c;信息安全与网络安全成为了人们关注的热点话题。尽管这两个概念经常被提及&#xff0c;但它们之间存在着明显的区别。本文旨在探讨信息安全与网络安全的定义、范畴及应对策略&#xff0c;以帮助读者更好地理解和应对相关挑战。 一、定义与范畴的差…...

Express 中 get 参数获取

1. 使用 req.query 获取 URL 查询字符串参数 在 GET 请求中&#xff0c;参数通常以查询字符串的形式附加在 URL 后面&#xff0c;格式为 ?参数名1值1&参数名2值2 。Express 里可通过 req.query 对象获取这些参数。 const express require("express"); const …...

充电桩快速搭建springcloud(微服务)+前后端分离(vue),客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

充电桩管理系统是专为中小型充电桩运营商、企业和个人开发者设计的一套高效、灵活的管理平台。系统基于Spring Cloud微服务架构开发&#xff0c;采用模块化设计&#xff0c;支持单机部署与集群部署&#xff0c;能够根据业务需求动态扩展。系统前端使用uniapp框架&#xff0c;可…...

深度求索(DeepSeek)开源周技术全景与行业影响研究报告

2025年2月24日至28日&#xff0c;中国AI企业深度求索&#xff08;DeepSeek&#xff09;发起了为期五天的“开源周”活动&#xff0c;连续开源五大核心代码库&#xff08;FlashMLA、DeepEP、DeepGEMM、DualPipe、EPLB&#xff09;及分布式文件系统3FS&#xff0c;覆盖AI模型训练…...

设计AI芯片架构的入门 研究生入行数字芯片设计、验证的项目 opentitan

前言 这几年芯片设计行业在国内像坐过山车。时而高亢&#xff0c;时而低潮。最近又因为AI的热潮开始high起来。到底芯片行业的规律是如何&#xff1f; 我谈谈自己观点&#xff1a;芯片设计是“劳动密集型”行业。 “EDA和工具高度标准化和代工厂的工艺标准化之后&#xff0c;芯…...

串口助手的C#编写以及有人串口服务器USR-DR301的使用

本文介绍C#编写串口程序的要点,串口服务器USR-DR301(RS232转TCP)的使用、以及调试过程中碰到的两个问题: 1). 调用串口报“连到系统上的设备没有发挥作用”. 2). “所有文本框都变成了透明”的异常处理 代码见:https://download.csdn.net/download/qq_34047402/9046713…...

Android中AIDL和HIDL的区别

在Android中&#xff0c;AIDL&#xff08;Android Interface Definition Language&#xff09; 和 HIDL&#xff08;HAL Interface Definition Language&#xff09; 是两种用于定义跨进程通信接口的语言。AIDL 是 Android 系统最早支持的 IPC&#xff08;进程间通信&#xff0…...

【HeadFirst系列之HeadFirst设计模式】第18天之蝇量模式(Flyweight Pattern):优化资源的秘密武器

蝇量模式&#xff08;Flyweight Pattern&#xff09;&#xff1a;优化资源的秘密武器 在软件开发中&#xff0c;当系统需要创建大量相似对象时&#xff0c;内存占用和性能问题就会浮出水面。《Head First 设计模式》介绍了 蝇量模式&#xff08;Flyweight Pattern&#xff09;…...

微信小程序将markdown内容转为pdf并下载

要在微信小程序中将Markdown内容转换为PDF并下载,您可以使用以下方法: 方法一:使用第三方API服务 选择第三方API服务: 可以选择像 Pandoc、Markdown-PDF 或 PDFShift 这样的服务,将Markdown转换为PDF。例如,PDFShift 提供了一个API接口,可以将Markdown内容转换为PDF格式…...

SQL CHAR_LENGTH返回字符串长度的函数

CHAR_LENGTH 是 SQL 中的一个用于返回字符串长度的函数。它计算的是字符串中的字符数&#xff0c;而不是字节数。这在处理多字节字符集&#xff08;如 UTF-8&#xff09;时尤其有用&#xff0c;因为一个字符可能会占用多个字节。 CHAR_LENGTH(string) string 是要计算长度的字…...

sqlserver删除表记录语句,及删除表时清零ID的SQL语句

sqlserver中&#xff0c;删除表中所有记录的语句如下 Delete from tableName 例&#xff0c;删除表logs的所有记录 sqlserver&#xff0c;删除表中所有数据&#xff0c;标识列ID归零&#xff0c;保留表结构的语句 truncate table tableName 例&#xff0c;删除表logs的所…...

求最大公约数问题(信息学奥赛一本通-1207)

【题目描述】 给定两个正整数&#xff0c;求它们的最大公约数。 【输入】 输入一行&#xff0c;包含两个正整数(<1,000,000,000)。 【输出】 输出一个正整数&#xff0c;即这两个正整数的最大公约数。 【输入样例】 6 9 【输出样例】 3 【题解代码】 #include<bits/stdc…...

Vue3中动态Ref的魔法:绑定与妙用

前言 在Vue 3的开发过程中,动态绑定Ref是一项非常实用的技术,特别是在处理复杂组件结构和动态数据时。通过动态绑定Ref,我们可以更灵活地访问和操作DOM元素或组件实例,实现更高效的交互和状态管理。本文将详细介绍如何在Vue 3中实现动态Ref的绑定,并通过实例展示其妙用。…...

Conda常用命令汇总

Conda 是一个流行的包管理器和环境管理工具&#xff0c;广泛应用于数据科学、机器学习等领域。它可以帮助我们管理 Python 包以及不同版本的环境&#xff0c;避免包冲突&#xff0c;提升项目的可复现性。以下是一些常用的 Conda 命令&#xff0c;涵盖环境创建、管理、包安装等常…...

2025年科技趋势深度解析:从“人工智能+”到量子跃迁的技术革命

一、“人工智能”国家战略&#xff1a;重塑产业生态的核心引擎 2025年政府工作报告首次将"人工智能"提升至国家战略层面&#xff0c;标志着AI技术正式成为驱动产业升级的核心力量。据麦肯锡最新研究显示&#xff0c;中国云计算市场规模已突破8315亿元&#xff0c;其…...

【瞎折腾/ragflow】构建docker镜像并部署使用ragflow

说在前面 操作系统&#xff1a;win11docker desktop版本&#xff1a;4.29.0docker engin版本&#xff1a;v26.0.0ragflow版本&#xff1a;nightly 安装docker 官网 如果是win11&#xff0c;backend建议使用wsl2 安装好后打开docker desktop&#xff0c;不然docker命令用不了 …...

哈弗赛恩公式计算长度JavaScript实现

哈弗赛恩公式&#xff08;Haversine formula&#xff09;是一种用于计算球面上两点间最短距离的数学方法&#xff0c;尤其适用于地球表面。本文将详细介绍哈弗赛恩公式的原理、应用以及如何使用JavaScript实现它。 一、哈弗赛恩公式原理 在球面几何中&#xff0c;哈弗赛恩公式…...

Pytest框架中的Fixture:深入理解与实际应用

Pytest是Python中最流行的测试框架之一&#xff0c;以其简洁的语法和强大的功能而闻名。在Pytest中&#xff0c;fixture是一个非常重要的概念&#xff0c;它允许我们在测试函数执行前后进行一些准备工作或清理工作。本文将深入探讨fixture的使用方法、实际应用场景以及一些高级…...