内容验证
“内容验证”功能,或“应用程序签名”,可防止使用您的官方二进制文件加载未签名的文件。给定一个密钥对,“verified_contents.json”是应用程序文件的签名。它使用工具“sign.py”和私钥(private_key.pem 文件)创建。公钥内置在 NW.js 二进制文件中。要运行签名的应用程序,请在应用程序目录中使用 `nw --verify-content=enforce_strict .`。它将显示简单的页面。接下来,尝试稍微修改 index.html 并再次运行它。NW 将报告文件已损坏并立即退出。
注意
此功能不能阻止有人入侵您的应用程序并使用其他 NW 二进制文件加载它。考虑使用 C++ 编写一些功能并使用 Node.js 模块、NaCl 或 使用 nwjc 将您的 JS 编译为二进制文件 加载它。
签名应用程序
要使用演示密钥对签名应用程序,请执行以下操作
- 更改为应用程序目录
- 确保 `verified_contents.json` 或 `computed_hashes.json` 不存在(你可以直接删除它们)。
- 运行 `payload.exe`;它将生成 `payload.json`,作为 `sign.py` 的输入。
- 运行 `python sign.py > /tmp/verified_contents.json`(重要的是,临时目标目录不能是应用程序目录)。
- 将生成的 `verified_contents.json` 文件移动到应用程序目录,完成。
重新构建以使用您自己的密钥对
要使用自己的密钥对,你需要重新构建 NW 二进制文件。并且命令行中 `--verify-content=` 参数的默认值需要在你的构建中设置为 `enforce_strict`。
- 生成你的密钥对:`openssl genrsa -out private_key.pem 2048`
(输出文件包含私钥和公钥)。 - 运行 `python convertkey.py`;它将把公钥转换为 C 源代码。
- 将生成的源代码放入
`content/nw/src/nw_content_verifier_delegate.cc`;替换默认密钥。 - 更改命令行参数的默认值:将该文件中的第 73 行更改为
`Mode experiment_value = ContentVerifierDelegate::ENFORCE_STRICT;`
- 构建 NW 二进制文件。
工具、示例应用程序和演示私钥位于 `tools/sign` 目录下。演示私钥与官方 NW 二进制文件中内置的公钥配对。