【问题标题】:How to sign DMG and installer for OSX如何为 OSX 签署 DMG 和安装程序
【发布时间】:2017-03-06 22:11:47
【问题描述】:

我已经为此奋斗了很长一段时间,如果有人能帮助我了解这里发生的事情,我将非常感激。

我有一个为 Windows 和 OSX 创建安装程序包的 install4j 项目。我有一个 Windows 的常规签名证书,这可以正常工作。我也有苹果开发者证书。我已将私钥从我的钥匙串导出到 p12 文件。我已经测试了生成的 p12 文件,以确保它可以与密钥库密码一起使用。该证书绝对有效,因为我今天(再次)创建了它。而且,当我通过 Maven 运行安装程序构建时,它甚至看起来一切正常:

[INFO] Compressed media file 'Mac OS X Single Bundle':
[INFO]   Compressing files
[INFO]   Generating VM options file vmoptions.txt.
[INFO]   Signing installer
[INFO]   Signing DMG
[INFO]   Moving media files to media directory /Users/....
[INFO]   The name of the media file is my-app_macos_1_1_1.dmg.
[INFO]   The size of the media file is 4.8 MB

这看起来不错,除了安装程序和 dmg 没有签名,或者至少没有以有用的方式签名:

$ spctl -a -v target/media/my-app_macos_1_1_1.dmg
target/media/my-app_macos_1_1_1.dmg: CSSMERR_TP_CERT_EXPIRED
$ spctl -a -v /Volumes/my-app/My\ Application\ Installer.app
/Volumes/my-app/My Application Installer.app: CSSMERR_TP_CERT_EXPIRED

证书未过期:

Alias name: mac developer: me myself (my company, inc.)
Creation date: Mar 6, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: C=US, O="Radiologics, Inc.", OU=K865L34KBQ, CN=Mac Developer: Me Myself (XXXX), UID=YYYY
Issuer: CN=Apple Worldwide Developer Relations Certification Authority, OU=Apple Worldwide Developer Relations, O=Apple Inc., C=US
Serial number: 30544da25ea67233
Valid from: Mon Mar 06 14:46:17 CST 2017 until: Tue Mar 06 14:46:17 CST 2018

但是无论我是直接从 install4j 还是通过 Maven 插件构建 dmg/installer,结果都是无效的。我总是得到类似的东西:

$ codesign -dvvv target/media/my-app_macos_1_1_0.dmg
Executable=.../target/media/my-app_macos_1_1_0.dmg
Identifier=my-app_macos_1_1_0
Format=disk image
CodeDirectory v=20100 size=173 flags=0x0(none) hashes=1+2 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=XXXXXX
Hash choices=sha256
CDHash=XXXXX
Signature size=8641
Authority=(unavailable)
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=36

为了让我们能够分发这个应用程序,我们确实需要让它工作,但我已经花了几天时间在这方面没有取得任何进展。如果有人能解释这里发生了什么,我将不胜感激。

【问题讨论】:

    标签: macos code-signing install4j


    【解决方案1】:

    有两种不同类型的证书可用于在 Mac App Store 之外分发应用程序。

    应用程序证书和安装程序证书。

    检查您的证书(您可以通过隐藏在 /Application/Utilities 中的 Keychain Access 应用程序中的“我的证书”来完成)以确保您使用的是安装程序证书(在我的机器上,它的名称是“开发人员” ID 安装程序:Michael Dautermann”。这与您用于对应用程序进行代码设计的“开发人员 ID 应用程序”证书是分开的。

    更多信息can be seen here

    至于 DMG,我最初的回答是“不能这样做”,但实际上从 MacOS 10.11.5 开始,您可以签署 dmg 文件。更多信息可以在“macOS 代码签名深度”参考指南的"Signing Disk Images" 部分查看。您将使用您的开发者 ID 应用程序证书。

    【讨论】:

    • 非常感谢您的帮助!我习惯于使用一个标准的 Java 签名证书对所有内容进行签名,因此拥有多个证书用于不同目的的想法非常……Apple :) 我必须做的一件事是,当我使用安装程序证书,我收到错误消息“install4j:编译失败。原因:com.install4j.c.g:在 PKCS12 文件中找不到开发人员 ID 应用程序密钥”。我切换到导出的“开发人员 ID 应用程序”证书并且它有效。不知道那是什么,但我的安装程序可以工作,所以我不在乎;)
    • 它成功了,因为磁盘映像只能使用您的 Developer ID 应用程序身份进行签名
    猜你喜欢
    • 2022-08-18
    • 2016-01-21
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2016-07-08
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多