【JavaEE】-- HTTPS

文章目录

  • 1. HTTPS是什么?
  • 2. 加密是什么?
    • 2.1 引入对称加密(效率高)
    • 2.2 引入非对称加密(效率低)
    • 2.3 引入证书
      • 2.3.1 数据签名
      • 2.3.2 通过证书解决中间人攻击

1. HTTPS是什么?

HTTP也是一个应用层协议,是在HTTP协议基础上引入了一个加密层。
HTTP协议内容大谱是按照文本的方式明文传输的,这就导致在传输的过程中会有被纂改的情况。

2. 加密是什么?

加密就是把明文(要传输的信息)进行一系列的变换,生成密文。
解密就是把密文再进行一系列的变换,还原成明文。

那么如何对数据进行加密呢?

2.1 引入对称加密(效率高)

对称加密就是加密和解密时使用的密钥时相同的。

使用对称加密,每个客户端都生成一个自己的密钥,这个密钥就是以后在HTTP通讯中使用的密钥,那么服务器就需要把客户端和密钥的关系维护起来。

客户端和服务器在第一次建立连接的时候就需要协商出来一个密钥,在协商密钥的过程肯定不能以明文传输,所以在协商密钥的时候也需要进行密文传输,所以就引入了非对称加密。

2.2 引入非对称加密(效率低)

非对称加密就是使用公钥加密用私钥解密;使用私钥加密用公钥解密。公钥加密的密文不能使用公钥加密;私钥加密的密文不能使用私钥解密。

私钥只保存在服务器,公钥保存在客户端。所有的客户端持有相同的公钥。

在这里插入图片描述

在客户端和服务端协商密钥时使用非对称加密进行加密,那么此时客户端和中间设备都持有公钥,服务器持有私钥。协商时,客户端使用公钥加密来传输协商的密文,此时即便中间设备截胡了信息但是中间设备没有私钥,并不能破解,也就拿不到协商的密钥了。之后被公钥加密的密钥传输到服务器,服务器使用私钥进行解密,获取到了协商的密文,服务器在给客户端返回响应的时候就会使用密钥加密要传输的数据。

在进行第一次协商正常通讯使用的密钥时,借助非对称加密,当正常密钥协商完成之后,所有的交互都使用对称加密进行通讯。

即便是这样,中间设备依旧可以使用一些特殊的手段获取到密钥:中间设备可以自己生成一对私钥和密钥,中间设备在客户端向服务器发送连接请求时拦截该请求,阻止其到达真实服务器,中间设备伪装成服务器把自己伪造的公钥发送给客户端。客户端将自己生成的此后进行通讯的密钥使用公钥加密发送给服务器时,中间设备再次进行拦截,此时就可以使用私钥进行解密,获取到客户端和服务器协商的密钥,然后再假装若无其事的把破解出来的密钥使用服务器真实发送的公钥进行加密发送给服务器,服务器接收到时就察觉不到,依旧使用自己持有的私钥进行正常解密。

那么此时仅仅引入一个非对称加密就解决不了被中间设备恶意破解的问题了,此时就又引入了一个验证公钥真伪的证书。

2.3 引入证书

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

这个把这个证书理解为一个结构化的字符串,里面包含了一下信息:证书发布机构、证书有效期、公钥、证书所有者、签名…

在这里插入图片描述

2.3.1 数据签名

签名的形成是基于非对称加密算法的,注意,目前暂时和https没有关系,不要和https中的公钥私钥搞混了。

在这里插入图片描述
当服务端申请CA证书的时候,CA机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:

  1. CA机构拥有非对称加密的私钥A和公钥A’
  2. CA机构对服务端申请的证书明文数据进行hash(使用MD5算法等),形成数据摘要(是一个字符串)。
  3. 然后对数据摘要用CA私钥A’加密,得到数字签名S服务端申请的证书明文和数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端了。

为什么数据摘要在网络传输的时候一定要使用私钥加密形成数字签名呢?
常见的数据摘要算法有:MD5、SHA系列。
以MD5为例,我们不需要研究具体的计算签名的过程,只需要了解MD5的特点:

  1. 定长。无论多长的字符串,计算出来的MD5值都是固定的长度(16字节版本或32字节版本)。
  2. 分散。源字符串只要改变一点点,最终得到的MD5值都会差别很大。
  3. 不可逆。通过源字符串生成MD5 很容易,但是通过MD5 还原成源字符串理论上不可能的。
    正因为MD5有这样的特性,我们可以认为:如果两个字符串的MD5 值相同,则认为这两个字符串相同。
    此时,如果中间设备把内容进行修改并重新hash,客户端就分辨不出来了,所以被传输的哈希值不能传输明文,需要传输密文。所以CA使用自己的私钥加密形成数字签名,将证书内容和加密的数字签名合起来形成证书,办法给服务器,当客户端请求时就发给客户端,中间人没有CA私钥,就无法更改或者整体掉包,就能保证安全。最后,客户端通过操作系统中已经存了的证书发布机构的公钥进行解密,还原出原始的哈希值,再进行校验。

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

有没有可能中间人直接掉包整个证书?
因为中间人没有CA私钥,所以无法制作假的证书,所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包,这个确实能够做到证书的整体掉包,但是证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。

为什么签名不直接进行加密,而是要先hash形成摘要?
缩小签名密文的长度,加快数字签名的验证签名的运算速度。

2.3.2 通过证书解决中间人攻击

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

在这里插入图片描述
当客户端获取到这个证书之后,会对证书进行校验(防止证书是伪造的)。

  1. 判定证书的有效期是否过期。
  2. 判断证书的发布机构是的受信任。
  3. 验证证书是否被纂改:从系统中拿到该证书发布机构的公钥,对签名进行解密

在这里插入图片描述

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

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

相关文章

撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度

撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度 提问 为我写一个改变关节base_spherical_center_high_joint角度的python脚本吧。适用于ROS2的humble 回答 下面是一个适用于 ROS 2 Humble 的 Python 脚本,它会以指定频率持续发布 …

Redis : Hash类型

哈希类型 哈希类型的命令 hset 设置key指定的字段(field)的值(value) 也可以设置多组field和value hget 获得哈希中指定字段的值 如果该字段为空或者key为空则返回nil hexists 判断哈希中是否有该字段的值 如果有则会返回1…

【Chipyard】 conda 环境安装与使用

一、Conda 安装(以 Miniconda 为例) Conda 是一个强大的环境管理工具,可用于创建、隔离和管理不同的 Python/R 环境。以下是在 Ubuntu 上安装和使用的完整流程: 1. 下载 Miniconda 安装包 bash # 下载最新版 Miniconda3&#…

【愚公系列】《生产线数字化设计与仿真》009-颜色分类站仿真(设置颜色分类站的仿真序列)

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…

ios 26官宣:car play升级提升车载体验

苹果公司正式官宣推出ios 26,该版本为ios 18的后续版本。此次软件更新在命名上焕然一新,设计层面更是实现了全面革新。其中,car play界面迎来全新升级,同时还新增了car play ultra功能。借助这一功能,用户不仅能够使用…

Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?如何解决

一、确定 MySQL 安装路径: 如果你是使用 Homebrew 安装的 MySQL,通常安装路径是 /usr/local/mysql/bin 如果你是通过官方 DMG 安装包安装的 MySQL,默认安装路径可能是 /usr/local/mysql/bin 你可以在终端中使用以下命令来查找 MySQL 的安装…

微软PowerBI考试 PL300-使用适用于 Power BI 的 Copilot 创建交互式报表

微软PowerBI考试 PL300-使用适用于 Power BI 的 Copilot 创建交互式报表 Microsoft Power BI 可帮助您通过交互式报表准备数据并对数据进行可视化。 如果您是 Power BI 的新用户,可能很难知道从哪里开始,并且创建报表可能很耗时。 通过适用于 Power BI …

Android11三网共存

一、优先级基本知识介绍 Android6.0之后系统中优先级设置都是根据Score分值来设置优先级,分值0-100,数值越高,越优先。 SIM卡网络 50 wifi网络 60 有线网络 70手机网络设置都有自己的Factory设置类,都继承自NetworkFactory.j…

【散刷】二叉树基础OJ题(三)

📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…

什么是数据交换?有哪些数据交换方式?

目录 一、数据交换是什么 二、数据交换面临的挑战 1. 数据格式差异 2. 数据标准不统一 3. 安全与隐私问题 4. 网络与性能问题 三、常见的数据交换方式 1. 文件交换 2. 数据库直连 3. 中间件交换 4. API接口交换 四、数据交换的发展趋势 1. 实时性要求提高 2. 标准…

C#winform画图代码记录

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 坐标变换 {public partial class Fo…

python打卡day50

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt import numpy as np# 定义通道注意力 class ChannelAttention(nn.Module):def __i…

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…

ateⅹⅰt()的用法

在C/C++中, atexit() 函数用于注册程序退出时需要调用的函数,即使程序通过 main() 函数返回、 exit() 函数退出或异常终止,这些注册的函数也会被执行。以下是其详细用法: 1. 函数原型与头文件 #include <cstdlib> // C++中需包含此头文件 int atexit(void (*functio…

【大模型】 使用llama.cpp 进行模型转换和量化

目录 1 相关知识 ■llama.cpp ■GGUF 格式 ■量化 2 详细步骤 克隆 llama.cpp 仓库 安装依赖 配置 CMake 构建 构建项目 验证安装 转换 safetensors 为 FP16 GGUF 量化模型 (Q4_K_M) 测试量化模型 1 相关知识 ■llama.cpp llama.cpp是一个开源的 C/C++ 库,旨…

大数据学习(133)-Hive数据分析2

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…

IDEA 连接 Docker 一键打镜像

首先&#xff0c;检查 IDEA 是否安装了 Docker 插件&#xff1a; 版本比较新的 IDEA 默认都安装了这个插件&#xff0c;如果没有安装&#xff0c;安装一下。 确保我们虚拟机上安装了 Docker 和 Docker-compose&#xff0c;并启动了 Docker。 找到 IDEA 下方的 Services tab 栏…

第六讲——一元函数微分学的应用之中值定理、微分等式与微分不等式

文章目录 连续函数性质定理定理1 有界与最值定理定理2 介值定理定理3 平均值定理定理4 零点定理定理5 费马定理导数介值定理(达布定理) 中值定理罗尔定理拉格朗日中值定理柯西中值定理泰勒公式 讨论方程的根问题——微分等式证明不等式问题使用函数的性质(单调性、凹凸性、最值…

2025.06.11【Ribo-seq】|用CPAT预测sORF序列的编码潜能

文章目录 前言一、准备工作1. 安装CPAT2. 下载物种特异性模型 二、准备sORF核酸序列1. 获取sORF的拼接核酸序列示例脚本&#xff08;假设已获得外显子fasta&#xff09;&#xff1a; 三、运行CPAT预测编码潜能1. 准备CPAT模型和hexamer表2. 运行CPAT 四、结果解读五、常见问题与…

Hive面试题汇总

一、hive架构相关 遇到这类问题&#xff0c;可以灵活的去回答&#xff0c;比如可以结合平时使用hive的经验作答&#xff0c;也可以结合下图从数据的读入、解析、元数据的管理&#xff0c;数据的存储等角度回答&#xff1a; 二、hive的特点 本题主要为了考察对hive的整体使用…