首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java EE(14)——网络原理——应用层HTTPS协议

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

作者头像
用户11873138
发布2026-01-13 21:28:54
发布2026-01-13 21:28:54
1160
举报

前言

上篇博文介绍了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对称加密

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

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

当然实际情况中的对称加密算法肯定比单纯的异或操作复杂很多

使用对称加密来传输数据:

在这里插入图片描述
在这里插入图片描述

这样传输数据貌似没问题,即使黑客抓取到了密文也无法解密。但问题是,客户端和服务器之间的密钥如何约定,毕竟一个服务器对应多个客户端,每个客户端都需要单独的密钥(如果所有客户端都使用同一个密钥,一旦被破解,损失就大了)。

所以,在客户端和服务器正式通信之前,客户端需要生成一个密钥并告诉给服务器,服务器保存对应客户端的密钥即可

在这里插入图片描述
在这里插入图片描述

以上加密传输有一个巨大漏洞,密钥是明文传输的,一旦被黑客获取到,那么后面的加密请求和相应就形同虚设。为了解决上述问题,就引入了非对称加密

2.2.2非对称加密

非对称加密:加密和解密使用一对公钥和私钥。可以用公钥加密,私钥解密,也可以用私钥加密,公钥解密。公钥可以对外公开,而私钥必须保密

使用非对称加密来传输数据:

大体流程:由服务器生成一对公钥(用于加密)和私钥(用于解密),服务器将公钥传输给客户端。客户端生成一个对称密钥,用公钥加密后传输给服务器,服务器接收到对称密钥后返回响应给客户端。从此以后客户端和服务器通信都使用对称密钥来进行加密

为什么不一直使用非对称加密?

代码语言:javascript
复制
因为非对称加密的成本远远高于对称加密,传输少量数据还可以胜任,但客户端和
服务器之间往往需要传输大量数据,如果一直使用非对称加密会大大降低传输效率
在这里插入图片描述
在这里插入图片描述

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

2.3中间人攻击问题

服务器生成一对公钥A和私钥A,服务器将公钥A发送给客户端。此时黑客也生成一对公钥B和私钥B,在公钥A经过黑客的路由器时,黑客将公钥A替换成公钥B并发送给客户端。客户端使用公钥B将对称密钥加密后发送给服务器,黑客拥有私钥B,所以能够获取到对称密钥,将对称密钥用公钥A加密后发送给服务器。服务器一看,对称密钥是用公钥A加密的,也不会察觉到问题,返回响应给客户端。从这一刻开始,客户端和服务器都拿到了对称密钥(当然黑客也拿到了,只是客户端和服务器不知道对称密钥已经泄露),此后通过对称加密来通信,但在黑客面前形同虚设。

仔细分析上述黑客的操作,黑客至始至终都没有拿到私钥A,但获取到了对称密钥

在这里插入图片描述
在这里插入图片描述

问题在于服务器和客户端无法感知到中间被黑客动了手脚。所以单纯的使用非对称加密,还需要保证以下两个条件:

代码语言:javascript
复制
 客户端获取到的公钥是服务器传过来的公钥
代码语言:javascript
复制
 客户端能识别当前这个公钥是不是黑客伪造的

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

2.4证书

2.4.1证书包含的重要信息
代码语言:javascript
复制
1.证书的颁发机构
2.证书持有者(服务器)的公钥
3.证书有效时间
4.证书持有者的信息
5.数字签名(被公证机构的私钥加密)
2.4.2证书引入流程

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

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

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

  • 第一组(非对称加密):用于校验证书是否被篡改,服务器持有私钥(在申请证书时获得),客户端持有公钥(操作系统中包含了可信任的CA机构有哪些,同时包含了对应的公钥)。服务器在客户端请求时,返回携带签名的证书,客户端通过公钥对证书进行验证,保证证书的合法性
  • 第二组(非对称加密):服务器生成的公钥(包含在证书里)和私钥(仅服务器持有),护送客户端的对称密钥到达服务器
  • 第三组(对称加密):客户端和服务器后续通信都使用该密钥加密
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1.什么是HTTPS协议?
  • 2.理解加密
    • 2.1概念
    • 2.2常见的加密方式
      • 2.2.1对称加密
      • 2.2.2非对称加密
    • 2.3中间人攻击问题
    • 2.4证书
      • 2.4.1证书包含的重要信息
      • 2.4.2证书引入流程
    • 2.5HTTPS加密过程中涉及到的三组密钥
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档