web-dev-qa-db-fra.com

La signature de code + la notarisation à l'aide de l'utilitaire jpackage ne fonctionnent pas sous macOS

Pour un certain contexte, j'utilise l'utilitaire jpackage pour essayer de créer un fichier DMG signé à livrer à mes utilisateurs. La raison pour laquelle j'ai besoin de signer ce DMG est que je souhaite authentifier le logiciel. Au fait, je ne suis pas sûr que la notarisation soit (encore) possible en utilisant jpackage mais j'essaye quand même.

Cependant, j'ai du mal à utiliser les options de signature de code intégrées de jpackage, qui est une condition préalable à une notarisation réussie.

J'exécute jpackage en utilisant les options --mac-sign --mac-package-signing-prefix CardrDebate --mac-signing-key-user-name "Developer ID Application: ********** (*******)" (j'ai rédigé l'ID de développeur réel car il est public sur StackOverflow).

Après avoir créé l'image de l'application jpackage, j'ai testé si le code généré était réellement signé en accédant à plusieurs des fichiers .dylib générés et en essayant codesign -vvv {filename}.dylib, et codesign indiquait que l'objet n'était pas du tout signé (PAS qu'il était incorrectement signé, mais qu'il n'était tout simplement pas signé du tout).

Ainsi, je pense que mon problème vient de mon utilisation (potentiellement) incorrecte des options de signature de jpackage sur macOS. Comment dois-je les utiliser?

6
Soham

FYI - J'ai exploré ce problème dans JDK 14.0.1 et je voulais partager les connaissances comme une autre solution provisoire jusqu'à ce que jpackage fonctionne correctement.

Dans le chemin source du JDK 14: src/jdk.incubator.jpackage/macosx/classes/jdk/incubator/jpackage/internal

le fichier MacAppBundler.Java contient ces lignes (81 & 82): "Developer ID Application:" + SIGNING_KEY_USER.fetchFrom (params),

où SIGNING_KEY_USER prend la valeur du paramètre - mac-signature-key-user-name à partir de la ligne de commande.

Avec ces lignes, l'utilisation de jpackage pour signer le DMG a toujours échoué. (L'application 'Developer ID:' ne correspond pas au nom de mon certificat.)

CHANGÉ ces lignes pour supprimer la "Application ID développeur:" et le signe "+" suivant. Lors de l'appel de jpackage, le nom complet du certificat a été utilisé comme valeur de paramètre:

--mac-signature-key-user-name "Application de développement Mac tierce: John Smith (ABCDEFGHIJ)"

et jpackage va maintenant (apparemment) construire et signer le DMG. N'ont pas pas réellement tenté de soumettre ceci au Apple Store, donc cela peut encore être incomplet.

Il est intéressant de noter que la source MacAppStoreBundler.Java contient les chaînes de préfixe "Application de développement Mac tierce:" et "Programme d'installation de développeur Mac tiers:" si suspectes ce jpackager appelle en fait les mauvaises méthodes - mais n'a pas encore résolu cela. Peut-être que jpackage doit avoir des paramètres supplémentaires pour spécifier exactement ce qui doit être fait (mais vous penseriez que '- type dmg' invoquerait la logique correcte ).

Étapes de base (maladroites) pour reproduire:

  • Télécharger la source depuis https://hg.openjdk.Java.net/jdk (choisi jdk14, commit 6c954123ee8d).
  • Téléchargez et décompressez le .Zip (ou .gz ou .bz2) dans un répertoire de travail
  • Utilisez n'importe quel éditeur de texte pour suivre le chemin depuis 'src' et changez MacAppBundler.Java comme indiqué ci-dessus.
  • Ouvrez la fenêtre du terminal et effectuez un cd dans le répertoire 'src'
  • exécutez 'make all' pour compiler le JDK 14 entier
  • lancez src/build/macosx-x86_64-server-release/images/jdk/bin/jpackage ... paramètres ...
1
JDC