如何将Sparkle的EdDSA(ed25519)签名私钥迁移至新Mac?
解决Sparkle EdDSA私钥导出迁移问题及密钥轮换说明
一、导出/迁移EdDSA私钥的可行方案
针对macOS 10.15.7上钥匙串无法导出EdDSA私钥(导出选项灰色)的问题,可尝试以下操作:
- 通过命令行导出密钥:
打开终端,先执行命令列出钥匙串中的目标密钥,替换引号内的名称为你Sparkle密钥的实际标识:
找到密钥后,执行导出命令将密钥保存为PEM文件:security find-generic-password -l "Sparkle EdDSA Key" -g
输入钥匙串密码完成导出后,将PEM文件复制到新Mac,再通过命令行导入新钥匙串:security export -k ~/Library/Keychains/login.keychain-db -t privkey -l "Sparkle EdDSA Key" -f pkcs8 -o ~/Desktop/sparkle-private-key.pemsecurity import ~/Desktop/sparkle-private-key.pem -k ~/Library/Keychains/login.keychain-db -t privkey -P "你的密钥密码" - 调整密钥访问权限:
打开钥匙串访问,找到目标私钥右键选择「显示简介」,切换到「访问控制」标签页,勾选「允许所有应用程序访问此项目」,或添加/usr/bin/security路径后,重新尝试导出操作。 - 整体备份钥匙串恢复:
在旧Mac的钥匙串访问中,选择「文件」->「导出钥匙串」,将整个登录钥匙串导出为.keychain文件,复制到新Mac后双击导入,私钥会同步迁移至新系统的钥匙串。
二、生成新密钥对原项目的影响
直接使用generate_keys生成新密钥会导致旧版本客户端无法验证新更新包的签名——因为旧客户端仅信任原公钥,因此不能直接替换密钥,必须配合密钥轮换机制完成过渡。
三、Sparkle密钥轮换(Key Rotation)的含义
密钥轮换是Sparkle提供的平滑过渡机制,核心是让新旧客户端都能正常验证更新,步骤如下:
- 使用
generate_keys生成新的EdDSA密钥对 - 在更新配置文件
appcast.xml中,同时保留原公钥和新公钥:可在全局配置中声明多个公钥,或在更新条目里添加新的<sparkle:publicKey>标签 - 用新密钥签名后续的更新包,同时保留旧更新包的可用性(供未升级的旧客户端下载)
- 等待足够周期(确保绝大多数用户已升级到包含新公钥的版本)后,再移除原公钥,完全切换到新密钥
此过程中,旧客户端用原公钥验证旧更新包,新客户端则可验证新更新包,实现无中断过渡。
内容的提问来源于stack exchange,提问作者soundflix
相关产品推荐
相关产品推荐

