7

私は、もともと個々の開発者向けの証明書と共に配布された電子アプリを持っています。

組織からの証明書を使用してそのアプリの次の更新に署名したいのですが、そうすると、(自動更新時に) 既存のインストールでコード要件が満たされていないというエラーがスローされます。

古い証明書と新しい証明書の両方で Electron アプリに適切に署名する方法はありますか? 既存のユーザーが中断されるのを防ぎたいです。

どんな助けでも大歓迎です!

ありがとう

4

1 に答える 1

8

自動更新を使用する 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.txtファイル内のへの参照を作成します (このようelectron-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"
于 2019-03-07T00:23:01.690 に答える