web-dev-qa-db-ja.com

コード署名+ jpackageユーティリティを使用した公証がmacOSで機能しない

状況によっては、jpackageユーティリティを使用して、署名済みDMGファイルを作成してユーザーに配信しようとしています。このDMGに署名する必要があるのは、ソフトウェアを公証したいからです。 ちなみに、(まだ)jpackageを使用して公証が可能かどうかはわかりませんが、とにかく試してみます。

ただし、jpackageの組み込みのコード署名オプションを使用すると問題があります。これは、公証を成功させるための前提条件です。

オプション--mac-sign --mac-package-signing-prefix CardrDebate --mac-signing-key-user-name "Developer ID Application: ********** (*******)"を使用してjpackageを実行しています(これはStackOverflowで公開されているため、実際の開発者IDを編集しました)。

Jpackageアプリイメージを作成した後、生成されたいくつかの.dylibファイルに移動してcodesign -vvv {filename}.dylibを試して、生成されたコードが実際に署名されているかどうかをテストしました。署名されていますが、まったく署名されていませんでした)。

したがって、私の問題は、macOSでのjpackageの署名オプションの(潜在的に)誤った使用によるものだと思います。これらをどのように使用すればよいですか?

6
Soham

FYI-JDK 14.0.1でこの問題を掘り下げ、jpackageが正しく機能するまで、別の暫定的な解決策として知識を共有したいと考えていました。

JDK 14のソースパス:src/jdk.incubator.jpackage/macosx/classes/jdk/incubator/jpackage/internal

ファイルMacAppBundler.Javaには、次の行(81&82)が含まれています: "Developer ID Application:" + SIGNING_KEY_USER.fetchFrom(params)、

ここで、SIGNING_KEY_USERは-mac-signing-key-user-nameパラメーターの値をコマンドラインから取得します。

これらの行でjpackageを使用してDMGに署名すると、常に失敗しました。 (「開発者IDアプリケーション:」が私の証明書の名前と一致しませんでした。)

これらの行を変更して、「開発者IDアプリケーション:」と次の「+」記号を削除しました。 jpackageの呼び出し時に、証明書の完全な名前をパラメーター値として使用しました。

--mac-signing-key-user-name "サードパーティMac開発者アプリケーション:John Smith(ABCDEFGHIJ)"

そして、jpackageは(どうやら)DMGをビルドして署名します。これを実際にApple Storeに送信しようとしたため、ないため、これはまだ不完全である可能性があります。

興味深いことに、MacAppStoreBundler.Javaソースには、正しい「サードパーティMac開発者アプリケーション:」と「サードパーティMac開発者インストーラ:」プレフィックス文字列が含まれているため、疑わしいそのjpackagerは実際には間違ったメソッドを呼び出していますが、まだ整理されていません。おそらく、jpackageは、何をすべきかを正確に指定するためにいくつかの追加パラメーターを必要とする(ただし、 '-type dmg'は正しいロジックを呼び出すと考えます) )。

再現するための基本的な(不器用な)手順:

  • ソースを https://hg.openjdk.Java.net/jdk からダウンロードします(jdk14をピック、6c954123ee8dを選択)。
  • .Zip(または.gzまたは.bz2)をダウンロードして作業ディレクトリに解凍します。
  • 任意のテキストエディタを使用して「src」からのパスをたどり、上記のようにMacAppBundler.Javaを変更します。
  • ターミナルウィンドウを開き、「src」ディレクトリにcdします。
  • 「make all」を実行してJDK 14全体をコンパイルします
  • src/build/macosx-x86_64-server-release/images/jdk/bin/jpackage ... parameters ...を実行します。
1
JDC