3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议

  1. 协议只是一种规则,你不按规则来就无法和目标方进行你的工作

  2. 协议说白了只是人定的规则,任何人都可以定协议

  3. 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概


HTTPS 协议

1、概述
  1. HTTPS(Hypertext Transfer Protocol Secure)是一种安全的超文本传输协议,主要用于在客户端和服务器之间安全地传输数据

  2. HTTPS 在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性

  3. HTTPS 的安全基础是 SSL(Secure Sockets Layer,安全套接字层)协议或其继任者 TLS(Transport Layer Security,传输层安全性)协议

2、优缺点
(1)优点
  1. 数据加密:通过 SSL/TLS 协议对传输的数据进行加密,保护用户隐私和敏感信息

  2. 身份验证:通过 SSL/TLS 证书对服务器进行身份验证,确保用户连接的是合法的服务器,防止中间人攻击

  3. 数据完整性:使用消息认证码等机制确保数据在传输过程中不被篡改

  4. 信任度高:使用 HTTPS 的网站会获得更高的信任度,因为 HTTPS 被视为安全可靠的通信方式

(2)缺点
  1. 性能开销:加密和解密数据会增加服务器和客户端的计算量

  2. 成本高昂:获取和维护 SSL/TLS 证书需要一定的成本和技术支持

  3. 部署复杂:需要在服务器端配置和管理 SSL/TLS 证书

  4. 缓存限制:HTTPS 通信不能像 HTTP 一样被中间设备缓存

3、工作原理
(1)客户端发起连接请求
  1. 客户端尝试访问一个 HTTPS 网站,例如,https://www.example.com

  2. 客户端发起一个到服务器 443 端口的连接请求(HTTPS 默认端口)

(2)服务器返回证书和相关信息
  1. 服务器响应客户端的连接请求,并发送其 SSL/TLS 证书,这个证书通常包含服务器的公钥、服务器的名称(通常是域名)、证书颁发机构(CA)的信息、证书的有效期等

  2. 服务器还可能发送其他 SSL/TLS 握手消息,包括它支持的加密套件列表等

(3)客户端验证服务器证书的合法性
  • 客户端收到服务器的证书后,会进行一系列验证步骤来确保证书的合法性,如果证书验证失败,客户端会向用户显示一个错误消息,并可能阻止连接
  1. 检查证书是否由受信任的证书颁发机构(CA)签发

  2. 检查证书是否已过期

  3. 检查证书上的域名是否与正在访问的域名匹配(防止域名欺骗)

  4. 可能还会检查证书链(如果服务器证书是由中间 CA 签发的),以确保整个链都是有效的

假设用户试图访问 https://www.example.com,但服务器返回的证书是为 https://www.malicious-example.com 签发的
客户端会检查证书上的域名,发现与正在访问的域名不匹配,因此会向用户显示一个“证书不匹配”的错误消息,并阻止连接
(4)客户端生成随机数并加密发送给服务器
  1. 一旦客户端验证了服务器的证书,它会生成一个随机数,这通常称为“预主密钥”或“客户端随机数”

  2. 客户端使用服务器证书中的公钥对这个随机数进行加密,并将加密后的结果发送给服务器

1、客户端生成一个随机数 ClientRandom
2、客户端使用服务器证书中的公钥对 ClientRandom 进行加密,得到 EncryptedClientRandom
3、客户端将 EncryptedClientRandom 发送给服务器
(5)服务器解密随机数并生成会话密钥
  1. 服务器收到 EncryptedClientRandom 后,使用自己的私钥进行解密,得到原始的 ClientRandom

  2. 服务器也会生成一个随机数,通常称为“服务器随机数”

  3. 服务器将 ClientRandomServerRandom 以及其他参数(例如,加密算法、哈希算法)组合在一起,通过一系列复杂的计算生成一个会话密钥,通常称为“主密钥”或“会话密钥”

1、服务器解密得到 ClientRandom
2、服务器生成一个随机数 ServerRandom
3、服务器将 ClientRandom、ServerRandom 以及选择的加密算法和哈希算法组合在一起,通过预定的密钥交换算法(如 Diffie-Hellman 或 RSA 密钥交换)计算出会话密钥 SessionKey
(6)双方使用会话密钥进行通信
  1. 一旦会话密钥生成,客户端和服务器都会使用这个密钥对后续的数据进行加密和解密

  2. 这种加密通常是使用对称加密算法(例如,AES)进行的,因为对称加密算法在处理大量数据时比公钥加密算法(例如,RSA)更快

1. 客户端想要发送一条消息给服务器
2. 客户端使用会话密钥 SessionKey 对消息进行加密,得到密文
3. 客户端将密文发送给服务器
4. 服务器收到密文后,使用相同的会话密钥 SessionKey 对密文进行解密,得到原始的消息

内容补充

1、非对称加密
(1)基本介绍
  1. 公钥加密:发送方使用接收方的公钥来加密消息,这样只有拥有对应私钥的接收方才能解密这条消息,从而保证了消息的安全性和隐私性

  2. 私钥解密:接收方使用自己的私钥来解密由发送方使用公钥加密的消息,由于私钥是保密的,只有接收方自己知道,因此只有接收方能够读取这条消息

(2)代码演示
  • 这里使用 Java 加密扩展(Java Cryptography Extension,JCE)来实现非对称加密
  1. 生成 RSA 密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048, new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
  1. 准备待加密的数据
String originalData = "Hello World";
byte[] originalDataBytes = originalData.getBytes();
  1. 使用公钥加密数据
Cipher encryptCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = encryptCipher.doFinal(originalDataBytes);
String encryptedDataBase64 = Base64.getEncoder().encodeToString(encryptedData);
System.out.println("Encrypted - Base64: " + encryptedDataBase64);
  1. 使用私钥解密数据
Cipher decryptCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = decryptCipher.doFinal(encryptedData);
String decryptedDataString = new String(decryptedData);
System.out.println("Decrypted: " + decryptedDataString);
2、证书签发
(1)自签名证书
  1. 会有不是由证书颁发机构(CA)签发的证书,这些证书通常被称为自签名证书(self-signed certificates)或内部证书(internal certificates)

  2. 它们可能由组织内部创建,用于测试、开发或内部网络中的通信

  3. 自签名证书是由创建证书的同一实体(例如,一个组织或开发者)签名和颁发的,而不是由公认的、独立的第三方证书颁发机构(CA)签发的

  4. 因此,自签名证书通常不会被大多数操作系统、浏览器或应用程序默认信任,因为它们没有被广泛认可的根证书颁发机构所背书

  5. 在开发和测试环境中,使用自签名证书是很常见的,因为它们允许你设置一个加密的、安全的 HTTPS 连接,而无需购买和配置来自 CA 的证书,然而,在使用自签名证书时,需要在客户端(例如,Android 应用程序)中配置信任存储或信任管理器,以显式地信任这些证书

(2)CA 签发证书
  1. 在生产环境中,应该始终使用由受信任的 CA 签发的证书,以确保你的 HTTPS 连接的安全性和可信度

  2. 这些证书经过了严格的验证和审计,并且被广泛认可和信任,使用来自 CA 的证书可以确保应用程序与服务器之间的通信受到加密保护,并且可以验证服务器的身份,从而防止中间人攻击和其他安全威胁

3、客户端差异性
  • 浏览器能直接发送 HTTPS 请求,而 Java 请求库不能直接请求,它们有如下差异
  1. 浏览器内置支持 HTTPS,浏览器通过内置的 SSL/TLS 协议栈来处理 HTTPS 请求,确保数据传输的安全性

  2. Java 请求库虽然也支持HTTPS请求,但通常需要开发者进行额外的配置,这包括设置 SSL/TLS 协议版本、信任库(TrustStore)和密钥库(KeyStore)等,如果没有正确配置,就可能导致请求失败

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

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

相关文章

国产脑机全面超越马斯克Nearlink

💥💥💥刚刚,世界首富马斯克同学已经是完全懵逼了,心态都崩了!因为今天爆出来了一个轰动了全世界科技界的大新闻,国产脑机在多个维度上全面超越了马斯克的Nearlink! 💥&am…

SpringBoot2:请求处理原理分析-RESTFUL风格接口

一、RESTFUL简介 Rest风格支持(使用HTTP请求方式,动词来表示对资源的操作) 以前:/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改…

数据仓库技术选型方案文档

关联博客: 数据仓库技术选型方案文档 Flink CDC MySQL数据同步到Doris表同步配置生成工具类 新版报表系统(明细报表、看板、数据大屏)方案&介绍 文章目录 数据仓库技术选型背景现状现状架构目标架构业务反馈&痛点问题:原因…

随手记:小程序体积超出2M包大小如何优化

小程序的包体积限制是2M,超出包大小如何优化 先简单列出,最近比较忙,后续优化明细,有着急的先留言踢我 1.分包 留几个主要的页面体积小的,剩下的在page.json中拆到subpackages中,简单举个例子 "page…

多维动态规划-面试高频!-最长公共子序列和最长公共子串、回文串-c++实现和详解

1143. 最长公共子序列 中等 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删…

力扣1049-最后一块石头的重量II(Java详细题解)

题目链接:1049. 最后一块石头的重量 II - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂…

FPGA实现串口升级及MultiBoot(二)FPGA启动流程

这个系列开篇肯定要先了解FPGA的启动流程,试想一下:我想实现MultiBoot,那么我应该在什么时候开始升级,升级失败后FPGA进行了哪些操作,以及怎么回到Golden区? 还有一个问题,就是我硬件打板回来&a…

Selenium 实现图片验证码识别

前言 在测试过程中,有的时候登录需要输入图片验证码。这时候使用Selenium进行自动化测试,怎么做图片验证码识别?本篇内容主要介绍使用Selenium、BufferedImage、Tesseract进行图片 验证码识别。 环境准备 jdk:1.8 tessdata&…

深度学习--对抗生成网络(GAN, Generative Adversarial Network)

对抗生成网络(GAN, Generative Adversarial Network)是一种深度学习模型,由Ian Goodfellow等人在2014年提出。GAN主要用于生成数据,通过两个神经网络相互对抗,来生成以假乱真的新数据。以下是对GAN的详细阐述&#xff…

如果电脑一直提示微软账号登录……

前言 今天小白接了个电脑故障问题:电脑提示微软账号登录,然后经过各种操作…… 电脑重启之后就变成了这样: 按理说,登录了微软账号之后,Windows系统要进入到桌面就必须有一个输入密码验证的过程,但这个界…

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时,离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库? 第三方库下载地址: 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…

nginx 新建一个 PC web 站点

注意:进行实例之前必须完成nginx的源码编译。(阅读往期文章完成步骤) 1.编辑nginx的配置文件,修改内容 [rootlocalhost ~]# vim /usr/local/nginx/conf/nginx.conf 2.创建新目录/usr/local/nginx/conf.d/,编辑新文件…

基于飞腾平台的Hive的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

通信工程学习:什么是PCM脉冲编码调制、DPCM差分脉冲编码调制、ADPCM自适应差分脉冲编码调制

PCM脉冲编码调制、DPCM差分脉冲编码调制、ADPCM自适应差分脉冲编码调制 PCM、DPCM、ADPCM是音频编码技术中的三种重要方式,它们在音频信号的数字化、压缩和传输中起着关键作用。以下是对这三种技术的详细解释: 一、PCM(Pulse Code Modulatio…

2024数学建模国赛选题建议+团队助攻资料(已更新完毕)

目录 一、题目特点和选题建议 二、模型选择 1、评价模型 2、预测模型 3、分类模型 4、优化模型 5、统计分析模型 三、white学长团队助攻资料 1、助攻代码 2、成品论文PDF版 3、成品论文word版 9月5日晚18:00就要公布题目了,根据历年竞赛题目…

[C#学习笔记]注释

官方文档&#xff1a;Documentation comments - C# language specification | Microsoft Learn 一、常用标记总结 1.1 将文本设置为代码风格的字体&#xff1a;<c> 1.2 源代码或程序输出:<code> 1.3 异常指示:<exception> 1.4 段落 <para> 1.5 换行&…

Reflection 70B:震撼AI行业的开源模型

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;开源与闭源模型的竞争变得越来越激烈。近日&#xff0c;Reflection 70B模型的发布在AI行业引发了巨大的震动。这款拥有70亿参数的开源模型不仅在多项基准测试中取得了优异成绩&#xff0c;还在很多情况下超越…

滑动窗口系列(同向双指针)/9.7

新的解题思路 一、三数之和的多种可能 给定一个整数数组 arr &#xff0c;以及一个整数 target 作为目标值&#xff0c;返回满足 i < j < k 且 arr[i] arr[j] arr[k] target 的元组 i, j, k 的数量。 由于结果会非常大&#xff0c;请返回 109 7 的模。 输入&…

【阿里云】个人认证与公司认证

个人认证和企业认证的区别 更新时间&#xff1a;2024-05-20 09:32:52 本文档主要介绍个人认证账号和企业认证账号的区别。 账号实名认证分为个人实名认证和企业实名认证。 个人账号认证&#xff0c;请选择认证类型为 个人&#xff0c;支持个人支付宝授权认证和个人扫脸认证。…

使用cage工具包生成验证码

目录 1. 导入依赖2. 控制类3. 测试 1. 导入依赖 <!-- 验证码工具 --><dependency><groupId>com.github.cage</groupId><artifactId>cage</artifactId><version>1.0</version></dependency>2. 控制类 RestControl…