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

Java EE(19)——网络原理——应用层HTTPS协议

前言

上篇博文介绍了HTTP协议(Java EE(18)——网络原理——应用层HTTP协议),这篇篇博文在了解HTTP协议的基础上再介绍HTTPS协议

1.什么是HTTPS协议?

HTTPS协议是一种通过计算机网络进行安全通信的协议。它是HTTP协议的安全版本,在HTTP协议的基础上加入SSL/TLS加密层来实现数据的安全传输,在传输层的默认端口号是443。HTTP该有的特性HTTPS也有

2.理解加密

2.1概念

加密是将明文(可直接理解的信息)转换为密文(不可直接理解的信息)的过程,以保证信息的机密性、完整性和真实性。在加密和解密的过程中,就需要额外的数据来辅助,这样的数据就叫做密钥。下面举个例子来直观的感受一下加密和解密的过程:
在《火烧圆明园》影视剧中,有这么一个场景:有人要尝试干掉慈禧太后,恭亲王奕想递个折子给慈禧太后通风报信,由于慈溪太后身边耳目太多,所以恭亲王就使用了一些手段来加密折子。

加密过程如下

在这里插入图片描述
恭亲王还递了一张纸,这张纸上面挖了几个小孔
在这里插入图片描述
将这张纸盖在原折子上面,就是恭亲王要说的话:当心肃顺,端华,戴恒。
以上过程中:明文就是折子上的内容,密文就是纸盖住后折子上的内容,密钥是挖了小孔的纸

2.2常见的加密方式

加密一般分为对称加密非对称加密

2.2.1对称加密

对称加密:加密和解密使用相同的密钥

使用异或操作就可以实现一个简单的对称加密:
设置明文为1234,密钥为8888。通过密钥加密后的密文是1234^8888=9834,当密文到达接收方后,再用密钥进行
解密,9834^8888=1234,把密文还原

当然实际情况中的对称加密算法肯定比单纯的异或操作复杂很多
使用对称加密来传输数据:
在这里插入图片描述
这样传输数据貌似没问题,即使黑客抓取到了密文也无法解密。但问题是,客户端和服务器之间的密钥如何约定,毕竟一个服务器对应多个客户端,每个客户端都需要单独的密钥(如果所有客户端都使用同一个密钥,一旦被破解,损失就大了)。
所以,在客户端和服务器正式通信之前,客户端需要生成一个密钥并告诉给服务器,服务器保存对应客户端的密钥即可
在这里插入图片描述
以上加密传输有一个巨大漏洞,密钥是明文传输的,一旦被黑客获取到,那么后面的加密请求和相应就形同虚设。为了解决上述问题,就引入了非对称加密

2.2.2非对称加密

非对称加密:加密和解密使用一对公钥和私钥。可以用公钥加密,私钥解密,也可以用私钥加密,公钥解密。公钥可以对外公开,而私钥必须保密
使用非对称加密来传输数据:
大体流程:由服务器生成一对公钥(用于加密)和私钥(用于解密),服务器将公钥传输给客户端。客户端生成一个对称密钥,用公钥加密后传输给服务器,服务器接收到对称密钥后返回响应给客户端。从此以后客户端和服务器通信都使用对称密钥来进行加密
为什么不一直使用非对称加密?

因为非对称加密的成本远远高于对称加密,传输少量数据还可以胜任,但客户端和
服务器之间往往需要传输大量数据,如果一直使用非对称加密会大大降低传输效率

在这里插入图片描述
上述操作通过非对称加密能够安全地将对称密钥交给服务器,这个过程中黑客即便进行抓包也无法获取到真正的密钥。但即便通过非对称加密,黑客还是有办法进行破解,那就是中间人攻击问题

2.3中间人攻击问题

服务器生成一对公钥A和私钥A,服务器将公钥A发送给客户端。此时黑客也生成一对公钥B和私钥B,在公钥A经过黑客的路由器时,黑客将公钥A替换成公钥B并发送给客户端。客户端使用公钥B将对称密钥加密后发送给服务器,黑客拥有私钥B,所以能够获取到对称密钥,将对称密钥用公钥A加密后发送给服务器。服务器一看,对称密钥是用公钥A加密的,也不会察觉到问题,返回响应给客户端。从这一刻开始,客户端和服务器都拿到了对称密钥(当然黑客也拿到了,只是客户端和服务器不知道对称密钥已经泄露),此后通过对称加密来通信,但在黑客面前形同虚设。
仔细分析上述黑客的操作,黑客至始至终都没有拿到私钥A,但获取到了对称密钥
在这里插入图片描述
问题在于服务器和客户端无法感知到中间被黑客动了手脚。所以单纯的使用非对称加密,还需要保证以下两个条件:

  1.  客户端获取到的公钥是服务器传过来的公钥
    
  2.  客户端能识别当前这个公钥是不是黑客伪造的
    

为了解决上述问题,就引入了证书机制

2.4证书

2.4.1证书包含的重要信息

1.证书的颁发机构
2.证书持有者(服务器)的公钥
3.证书有效时间
4.证书持有者的信息
5.数字签名(被公证机构的私钥加密)

2.4.2证书引入流程

  1. 服务器生成公钥A和私钥A
  2. 服务器向第三方公证机构申请证书
  3. 证书(包含公钥A)申请成功后返回给服务器
  4. 服务器向客户端发送证书
  5. 客户端拿到证书,将证书中的数据进行哈希计算,得到hash1,再使用公证机构的公钥解密数字签名得到hash2,对比hash1和hash2以验证证书合法性
  6. 客户端验证成功后使用公钥A加密对称密钥并发送给服务器
  7. 服务器拿到对称密钥后返回响应给客户端,确定此后通信通过对称密钥来加密
    在这里插入图片描述

问题1:黑客能拿到证书中的公钥A吗?
答案:是可以的,证书的侧重点是防修改
问题2:黑客能修改证书数据吗?
答案:不能。一旦修改客户端计算出的hash值和解密数字签名得到的hash值不一样
问题3:黑客能伪造证书发给客户端吗?
答案:不能。客户端内置了公证机构的公钥,该公钥无法解密黑客的伪证书,客户端也能发现问题

2.5HTTPS加密过程中涉及到的三组密钥

第一组(非对称加密):用于校验证书是否被篡改,服务器持有私钥(在申请证书时获得),客户端持有公钥(操作系统中包含了可信任的CA机构有哪些,同时包含了对应的公钥)。服务器在客户端请求时,返回携带签名的证书,客户端通过公钥对证书进行验证,保证证书的合法性

第二组(非对称加密):服务器生成的公钥(包含在证书里)和私钥(仅服务器持有),护送客户端的对称密钥到达服务器

第三组(对称加密):客户端和服务器后续通信都使用该密钥加密

相关文章:

  • 视觉语言,轻量且开源-Gemma 3
  • nut-ui下拉选的实现方式:nut-menu
  • 快速入手-基于Django-rest-framework的第三方认证插件(SimpleJWT)权限认证扩展返回用户等其他信息(十一)
  • 闭包与作用域的理解
  • Linux操作系统下离线安装nginx
  • 嵌入式学习第三十天--队列
  • 【区块链安全 | 第二十篇】类型之运算符
  • Docker 拉取镜像部分成功部分失败?
  • TDengine 核心概念与时序数据模型深度解析(二)
  • 从TRPO到GRPO
  • scikit-surprise 智能推荐模块使用说明
  • 简单视图函数
  • (BFS)题解:P9425 [蓝桥杯 2023 国 B] AB 路线
  • 智能打印预约系统:微信小程序+SSM框架实战项目
  • 机器学习的一百个概念(6)最小最大缩放
  • Codeforces Round #1014 (Div. 2)
  • 三路排序算法
  • 本科lw指导
  • 鸿蒙NEXT开发Base64工具类(ArkTs)
  • 消息队列--RocketMQ
  • 免费网站建站申请/班级优化大师学生版
  • 网站未备案可以上线吗/金华网站建设
  • 做招牌的网站/google图片搜索
  • 建筑类期刊排名/重庆百度seo代理
  • wordpress新手优化/南京seo招聘
  • 网站设计论文3000字/网络营销怎么做?