技术日志:破除内网“安全壁垒”,实现 Hexo 加密与搜索的本地化
背景:环境的“歧视”
在内网环境(http://192.168.47.128:40080)下,现代浏览器会启动“不安全环境”限制。由于没有 HTTPS,浏览器会封锁 crypto.subtle 和 crypto.randomUUID 等原生加密接口,导致 Hexo-blog-encrypt 和 Pagefind 插件相继崩溃。 于是博客的搜索和解密功能都失效了。
核心思维:排除错误选项,校准底层变量
Whale3070 遵循“排除法”逻辑,通过以下三个层面的“校准”,彻底打通了内网博客的全部功能。
第一步:资源本地化(排除公网依赖)
为了彻底断开对外部 CDN 的依赖,我们首先确保所有工具库都在本地服务器上。
- 下载脚本: 将
crypto-js.min.js存放在source/目录。
1 | |
- 修改配置: 在
_config.yml中配置vendor_base: /。
- 逻辑: 强制插件在当前域名的根路径寻找解密库,确保内网离线可用。
第二步:环境伪装(手动注入 API 垫片)
针对 Pagefind 报错 crypto.randomUUID is not a function,我们在主题模板中注入了“环境伪装”脚本。
操作文件: /root/Whale3070.github.io/themes/fluid/layout/_partial/header.ejs
在文件顶部加入以下代码:
1 | |
第三步:突破“安全上下文”限制(校准动态变量)
这是最关键的一步。即便有了垫片,加密插件底层的 importKey 依然需要浏览器层面的放权。
- Chrome Flag 授信:
访问chrome://flags/#unsafely-treat-insecure-origin-as-secure,
多地址白名单:在 Chrome 的那个输入框里,你可以用逗号隔开,多填几个备选 IP(比如 http://192.168.47.128:40080, http://192.168.47.129:40080, http://192.168.47.130:40080),这样下次 IP 变了也能直接兼容。
将其设置为 Enabled。
浏览器要重启才能生效。
- 捕捉“变量位移”:
- 发现: 系统重启后,虚拟机 IP 从
.130漂移到了.128。 - 解决: 将授信地址精准修改为
http://192.168.47.128:40080。
- 最终验证:
控制台输入window.isSecureContext返回true。至此,浏览器不再限制hbe.js的运行。