Codesign Electron App - 如何优雅地切换证书?

Posted

技术标签:

【中文标题】Codesign Electron App - 如何优雅地切换证书?【英文标题】:Codesign Electron App - How to gracefully switch certificates? 【发布时间】:2017-02-15 09:32:29 【问题描述】:

我有一个电子应用程序,它最初是随个人开发者证书一起分发的。

我现在想使用我组织的证书签署该应用的下一次更新,但是当我这样做时,现有安装(在自动更新时)会抛出不满足代码要求的错误。

有没有办法用新旧证书正确签署电子应用程序?我想防止我的现有用户被打扰。

任何帮助表示赞赏!

谢谢

【问题讨论】:

你是怎么解决这个问题的? 【参考方案1】:

我们遇到了类似的情况,MacOS 的 Electron 应用程序使用自动更新,我们需要切换到新证书,而不需要让每个人手动下载并重新安装应用程序。自动更新过程需要识别新证书。没错,如果新证书不被识别,旧版本将拒绝更新。

我们的策略是:

查看应用程序的designated requirement(或DR),当使用旧证书签名时,使用codesign -d -v -r - <path-to-app> 使用新证书签名时查看应用程序的designated requirement 将包含两个证书的组合 designated requirement 放入 electron-builder-requirements.txt 文件中 确保您没有在组合的designated requirement 字符串中包含identifierelectron-builder.yaml 文件中引用electron-builder-requirements.txt(在mac: 下添加一行,如requirements: electron-builder-requirements.txt) 发布新版本的应用,使用旧证书签名,但使用包含两个证书信息的 DR 等到几乎每个人的桌面上都运行了包含在 DR 中提及这两个证书的版本 更新构建以改用新证书,并删除 electron-builder-requirements.txt 文件 发布使用新证书签名的新版本应用(不需要任何要求文件,它只会在 DR 中列出自己的证书)

具有包含有关两个证书信息的 DR 的旧版本应用程序将允许自动更新到使用任一证书的新版本。

我发现this document about signing code manually 有助于理解“指定要求”。

更新:这是electron-builder-requirements.txt 文件的示例(出于隐私目的,我修改了一些字母/数字):

designated => certificate leaf = H"2323ce6b0XXXXXXXX39f2064be999999997272b1" or anchor apple generic and certificate 1[field.1.2.840.199995.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.199995.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6ZXXXXXXUY"

【讨论】:

非常感谢您的回答!您是否有您的 electron-builder-requirements.txt 文件的示例?我很难获得正确的语法或组合请求。 @MishaReyzlin 我已经编辑了答案以包含 electron-builder-requirements.txt 文件的示例。祝你好运,我希望你能够让它工作! 您能解释一下您是如何做到这一点的:将包含两个证书的组合指定要求放入 electron-builder-requirements.txt 文件中是否有办法获得组合指定要求?跨度> 创建组合指定需求是一个需要手动完成的步骤。我查看了使用旧证书和新证书签署时应用程序的指定要求。我使用“或”将两者结合起来。请参阅我上面包含的 electron-builder-requirements.txt 文件。 “指定=>”之后的所有内容都是组合的指定要求。在那里寻找“或”,它将两个指定的要求彼此分开。

以上是关于Codesign Electron App - 如何优雅地切换证书?的主要内容,如果未能解决你的问题,请参考以下文章

如何为Electron / Atom Shell App设置应用程序图标

mac app 的 codesign 插件

codesign 在哪里存储 OSX 上已签名文本文件的签名?

Mac-codesign命令error: The specified item could not be found in the keychain

Electron builder 代码签名:bundle 格式无法识别、无效或不合适

Mac App Store应用签名和pkg签名(必须签名后才能销售)