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
字符串中包含identifier
在electron-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设置应用程序图标
codesign 在哪里存储 OSX 上已签名文本文件的签名?
Mac-codesign命令error: The specified item could not be found in the keychain