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

jam*_*s0n 6 code-signing code-signing-certificate codesign electron electron-builder

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

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

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

任何帮助表示赞赏!

谢谢

Van*_*ner 7

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

我们的策略是:

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

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

我发现这份关于手动签署代码的文档有助于理解“指定要求”。

更新:这是该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"
Run Code Online (Sandbox Code Playgroud)