dangerzone 本地 html 包签名验证必须严格遵循 cosign 验证 + 摘要绑定 + 用户数据目录签名缓存全流程,缺一即报 signaturemismatch 或 invalid signature 错误;校验基于实际 sha256 摘要而非路径文件名,公钥固定于 share/freedomofpress-dangerzone.pub,.sig 文件须与 html 包同级且命名规范,更新包须重签 blob 内容并手动清理旧签名缓存。

Dangerzone 的本地 HTML 包签名与更新,不是“配个证书就能跑”,而是必须走 cosign 验证 + 摘要绑定 + 用户数据目录签名缓存这一整套流程。跳过任一环,dangerzone 就会拒绝加载容器,报 SignatureMismatch 或 Invalid signature 错误。
如何验证本地 HTML 包的容器签名?
危险在于:很多人把 HTML 包直接扔进 dangerzone 目录就以为完事了,但实际校验发生在运行时——它不看文件名或路径,只认镜像摘要(image_digest)和对应签名内容是否匹配。
-
verify_signature()函数会先比对签名中声明的manifest_digest和你本地解压/加载的 HTML 包实际计算出的 SHA256 摘要,两者不一致立刻抛SignatureMismatch - 公钥固定在
share/freedomofpress-dangerzone.pub,不能替换或绕过;改了就无法通过cosign.verify_blob()校验 - 签名文件(通常为
.sig后缀)必须和 HTML 包同级存放,且文件名需能被signatures.py自动识别(推荐用标准命名:如dangerzone-container-v0.9.0.tar.gz.sig)
本地 HTML 包更新后为何签名失效?
HTML 包哪怕只改了一个空格、多一行注释、甚至只是重新 gzip 压缩,SHA256 摘要就会变。而签名里硬编码了旧摘要,自然校验失败。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- 不要手动修改 HTML 包内任何文件后再复用旧签名——这是最常见误操作
- 更新包必须重新生成:用
cosign sign-blob对新包的二进制内容签名,不是对 tar.gz 文件本身签名(注意区分 blob vs image) - 签名生成命令示例:
cosign sign-blob --key cosign.key dangerzone-container-v0.9.1.tar.gz
输出的.sig文件才有效 - 旧签名不会自动清理,需手动删掉
~/.local/share/dangerzone/signatures/下对应旧摘要的条目,否则 updater 可能混淆
如何让 Dangerzone 信任自建的本地 HTML 容器?
官方流程默认只信任预置公钥签名的容器。若你要部署私有 HTML 包(比如定制转换逻辑),必须同时替换公钥和签名机制,但这会脱离上游安全模型。
- 不建议覆盖
share/freedomofpress-dangerzone.pub——这会导致无法再拉取官方更新 - 可行做法是:在启动前设置环境变量
DANGERZONE_CUSTOM_PUBKEY_PATH指向你的公钥,并确保所有签名都用配对私钥生成 - 但要注意:
dangerzone的 updater 逻辑未开放 hook,所以自动更新将跳过你的私有包;必须自行管理版本和签名生命周期 - 调试时可临时加
--no-signature-check(仅限开发环境),但生产环境绝不可启用
真正麻烦的不是签名本身,而是摘要绑定这个隐性契约:HTML 包内容、打包方式、压缩参数、文件顺序,全部影响最终 digest。一次构建,一次签名,一次部署——少一个环节,安全链就断了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










