如何在Nikola静态网站嵌入GPG公钥?推荐WKD实现方案
我之前用Nikola搭建个人站点时,刚好研究过怎么添加GPG公钥才能既保证Nikola不篡改密钥内容,又让访客能轻松导入。后来过了几个月,我发现WKD是更理想的方案,这里把两个方案都分享给你:
当下最优方案:保证Nikola不修改密钥+访客易导入
核心思路是让Nikola以“原始文件”的方式处理公钥内容,避免Markdown渲染时意外修改格式,同时给访客提供多种导入途径:
步骤1:准备可下载的公钥文件
把你的GPG公钥导出为.asc格式(比如my-pubkey.asc),将文件放到Nikola项目根目录的files/文件夹里(如果没有这个文件夹就新建一个)。Nikola会自动把files/里的内容原样复制到生成的站点目录,不会做任何修改。步骤2:在页面中展示公钥并添加下载入口
在你要展示公钥的页面(比如pages/gpg.md)中添加以下内容:### 我的GPG公钥 你可以通过以下任意一种方式导入我的公钥: 1. 复制下方代码块的全部内容,打开终端执行 `gpg --import -`,然后粘贴内容并按回车 2. 下载公钥文件后,执行 `gpg --import my-pubkey.asc` ```text -----BEGIN PGP PUBLIC KEY BLOCK----- # 这里粘贴你的完整GPG公钥内容,包括所有行,不要省略开头和结尾的标记 -----END PGP PUBLIC KEY BLOCK-----步骤3:验证渲染结果
运行nikola build生成站点后,检查输出目录中对应页面的源码,确认公钥的格式完全没有被修改,下载链接也能正常访问。
7个月后更新:理想方案采用WKD(Web Key Directory)
使用WKD的优势在于,支持WKD的GPG客户端(比如GnuPG 2.1及以上版本)可以自动通过你的域名查找并导入公钥,访客不需要手动复制内容或下载文件,体验更流畅。在Nikola中配置WKD的步骤如下:
步骤1:生成WKD所需的哈希值
打开终端,执行以下命令(替换成你的邮箱地址):gpg --with-wkd-hash your-email@example.com输出结果中会显示类似
hu/abcdef1234567890的路径,其中abcdef1234567890就是你需要的哈希文件名。步骤2:创建WKD目录结构
在Nikola项目的files/目录下创建以下层级的文件夹:files/.well-known/openpgpkey/hu/步骤3:放置公钥和policy文件
- 导出公钥并命名为刚才生成的哈希值:
把这个文件放到gpg --export --armor your-email@example.com > abcdef1234567890files/.well-known/openpgpkey/hu/目录下。 - 在
files/.well-known/openpgpkey/目录下创建一个名为policy的文件,内容仅一行:
这个文件用于告诉GPG客户端该公钥可以公开获取。access: unrestricted
- 导出公钥并命名为刚才生成的哈希值:
步骤4:测试配置
运行nikola build生成站点后,在终端执行:gpg --locate-key your-email@example.com如果配置正确,GPG会自动通过WKD找到并导入你的公钥。
内容的提问来源于stack exchange,提问作者Jonas Stein

