HTML5如何加密推送消息的载荷_HTML5推送载荷加密方案【归纳】

秋丽大大_7573

秋丽大大_7573

2026-01-16

497人浏览

原创

HTML5推送消息加密必须遵循RFC 8291标准,由服务端使用ECDH密钥协商与AES-GCM加密载荷,客户端仅生成并安全保管P-256密钥对,浏览器拒绝非标准加密格式。

html5如何加密推送消息的载荷_html5推送载荷加密方案【归纳】

HTML5 本身不提供原生的推送消息加密能力,推送载荷(payload)的加密必须在应用层实现,核心在于:服务端加密 + 客户端解密,且依赖 Web Push 协议标准(RFC 8291) 规定的加密机制。浏览器(Chrome、Firefox、Edge 等)仅支持经过 Elliptic Curve Diffie-Hellman(ECDH)密钥协商 + AES-GCM 加密 的载荷,不接受明文或自定义加密格式。

必须使用 Web Push 标准加密流程

浏览器只接收符合 RFC 8291 的加密推送消息,否则直接丢弃。这意味着:

  • 不能在 service worker 中用 CryptoJS 或 Web Crypto API 自行加密后发“明文”推送;
  • 不能跳过 VAPID(Voluntary Application Server Identification)签名和密钥协商步骤;
  • 客户端(service worker)生成的 publicKey/privateKey 对(P-256 曲线) 必须安全导出公钥并上传至服务端;
  • 服务端需用该公钥 + 自己的 VAPID 私钥执行 ECDH 密钥派生,再用派生密钥 AES-GCM 加密载荷与 salt/nonce。

关键加密组件与职责分工

加密不是单点操作,而是端到端协作:

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载
  • 客户端(网页 + Service Worker):生成 P-256 密钥对,通过 navigator.serviceWorker.register() 后调用 pushManager.subscribe() 获取 endpoint 和 keys.p256dh(公钥)、keys.auth(auth secret);私钥永不离开设备;
  • 服务端(Node.js / Python / Java 等):使用 p256dh 和 auth,结合 VAPID 私钥,按 RFC 8291 执行加密(推荐使用成熟库如 web-push(Node.js)、pywebpush(Python));
  • 推送服务(如 Firebase Cloud Messaging、Mozilla Autopush):仅中转已加密的 payload,不参与加解密,也不读取内容。

典型加密载荷结构(RFC 8291)

最终发送给推送服务的 HTTP POST body 是二进制(非 JSON),包含:

  • salt(16 字节随机数)——用于 HKDF 派生密钥;
  • record size header(可选,通常为 0x00);
  • AES-GCM 加密后的 payload(含认证标签,16 字节);
  • 所有内容以二进制字节流方式组织,Content-Encoding: aes128gcm,Encryption 和 Crypto-Key 头携带 p256dh 与 auth。

示例请求头:

Content-Encoding: aes128gcm
Encryption: salt=base64salt
Crypto-Key: keyid=p256dh; dh=base64p256dh, keyid=auth; key=base64auth

常见误区与规避建议

  • 误以为前端 JS 可“先加密再推送”:Service Worker 无法主动触发推送,推送由服务端发起;JS 无权限访问推送密钥私钥,也无法构造合规加密体;
  • 忽略 VAPID 签名导致 401 错误:即使载荷加密正确,缺少合法 VAPID Authorization 头,推送服务会拒绝;
  • 混淆 applicationServerKey 用途:它只是客户端密钥协商的“标识”,不是加密密钥;真正用于 ECDH 的是订阅时返回的 p256dh;
  • 尝试加密空载荷或超长载荷:Chrome 限制加密载荷 ≤ 4096 字节(含开销),超限将被截断或失败;敏感数据建议仅传 ID,详情由客户端拉取。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2355

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3882

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1296

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4499

7

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

4891

6

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

2024.03.06

8788

6

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

2025.12.30

894

19

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

2025.12.30

754

12

html5空格代码怎么写
html5空格代码怎么写

在HTML5中,空格不能直接通过键盘空格键实现,需使用特定代码。本合集详解常用空格写法:&nbsp;(不间断空格)、&ensp;(半个中文空格)、&emsp;(一个中文空格)及CSS的white-space属性等方法,帮助开发者精准控制页面排版,避免因空格失效导致布局错乱,适用于新手入门与实战参考。

2025.12.30

433

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程