【问题标题】:App can not be opened because it is from an unidentified developer无法打开应用程序,因为它来自身份不明的开发者
【发布时间】:2017-04-20 05:38:49
【问题描述】:

问题:

在阅读本文之前请注意:“告诉他们去System preferences > Security & privacyallow 3rd party applications to run。这不是一个可接受的解决方案。

我创建了一个.app,它已使用有效的 Mac 开发人员证书进行签名。然而从互联网上下载并运行仍然会引发安全提示:

无法打开应用,因为它来自身份不明的开发者

这是.appcodesign -vvv 终端转储:

Executable=/Users/me/Desktop/ADRA.app/Contents/MacOS/ADRA
Identifier=unity.Company.ADRA NSW 2016
Format=app bundle with Mach-O thin (i386)
CodeDirectory v=20200 size=178145 flags=0x0(none) hashes=5561+3 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=79ecf88721d6387749c1f6b10355c3683ef20eb2
CandidateCDHash sha256=0799e968a18a663a0c08d26d3fb7826017ce5a3a
Hash choices=sha1,sha256
CDHash=0799e968a18a663a0c08d26d3fb7826017ce5a3a
Signature size=4739
Authority=3rd Party Mac Developer Application: Company Pty Ltd (NH73TNDB28)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=20 Apr 2017, 2:46:12 PM
Info.plist entries=14
TeamIdentifier=NH73TNDB28
Sealed Resources version=2 rules=12 files=138
Internal requirements count=1 size=224

我不明白为什么这不通过 Gatekeeper?有什么遗漏吗? Apple 是否需要进一步付款/贿赂或其他什么?


更新 1:

@TheDarkKnight 建议我使用不正确的证书来签署.app。看起来他们是正确的,所以我去创建一个新的Developer ID Application certificate 但显然因为我不是组帐户中的“代理”,所以我现在必须等到“代理”为我创建一个 - 似乎倒退,有没有其他方法可以等待“代理”为我做这个?

(在 Xcode 中)如果“开发者 ID”单选按钮显示为灰色,您可能有一个组帐户。 这些类型的帐户只允许“代理”角色创建开发者 ID。 如果您遇到困难,请联系创建您的群组 Apple 开发者帐户的人。

https://developer.mozilla.org/en-US/docs/Mozilla/Signing_Mozilla_apps_for_Mac_OS_X


更新 2:

所以我今天终于拿到了我的新证书,重新签署了.app,从运行的服务器下载了它,仍然收到错误消息。现在看来权威是正确的:

Executable=/Users/me/Downloads/ADRA.app/Contents/MacOS/ADRA
Identifier=com.company.adra
Format=app bundle with Mach-O thin (i386)
CodeDirectory v=20200 size=178133 flags=0x0(none) hashes=5561+3 location=embedded
Library validation warning=OS X SDK version before 10.9 does not support Library Validation
OSPlatform=36
OSSDKVersion=657408
OSVersionMin=656896
Hash type=sha256 size=32
CandidateCDHash sha1=90d2a54162d6d018bf4f7602d7707c8e8e522fc6
CandidateCDHash sha256=dadfe5203d1367ea776f9501025dbd4ce751ee30
Hash choices=sha1,sha256
Page size=4096
CDHash=dadfe5203d1367ea776f9501025dbd4ce751ee30
Signature size=8930
Authority=Developer ID Application: Company Pty Ltd (NH73TNDB28)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=10 May 2017, 3:36:51 pm
Info.plist entries=14
TeamIdentifier=NH73TNDB28
Sealed Resources version=2 rules=12 files=138
Internal requirements count=1 size=184

我只是在.app 上签名,我还需要做些什么来完成这项工作吗?是否需要等待一段时间才能生效?

【问题讨论】:

  • Authority=3rd Party Mac Developer Application: Company Pty Ltd (NH73TNDB28) - 这是自签名证书吗?开发者证书通常以“开发者 ID 应用程序...”开头。出于显而易见的原因,Gatekeeper 不应允许使用自签名证书。
  • @TheDarkKnight 我自己创建了证书吗? - 如果这就是你要问的,不,我是从 apple.developer 那里得到的。
  • 我认为您那里的证书类型错误。您的 Apple Dev 帐户中是否还有其他证书可供下载,这可能值得一看。查看我机器上的所有其他第 3 方应用程序,它们的证书“权限”都以 “开发者 ID 应用程序:...” 开头
  • @TheDarkKnight 这非常有价值 - 谢谢,我会在早上看第一件事并验证这里发生了什么。
  • @TheDarkKnight 我只是 codesign verified 一堆 3rd 方应用程序,你是对的,他们都有 Developer ID Application 开始。现在正在考虑获得新证书。

标签: macos code-signing


【解决方案1】:

Apple 为不同的目的提供不同的证书。

如果您查看从 App Store 下载的应用程序的签名,您会发现它们通常包含通用名称:Apple Mac OS Application Signing,因为 Apple 重新签署了他们通过商店分发的应用程序。

对于通过替代流分发的第 3 方开发人员,他们的应用程序证书通常有一个以 "Developer ID Application..." 开头的通用名称。

请注意,还有其他 3rd 方证书可用,例如用于签署安装程序包的 安装程序证书,其通用名称以 "Developer ID Installer..." 开头。

能够使用证书签署产品的特权必须受到限制和严格控制。

如果您的证书副本被泄露,它可能会被用于恶意目的,例如分发恶意软件,就像 KeRanger, which infected the Transmission BitTorrent application 的情况一样。

如果您怀疑自己拥有的证书泄露,您需要撤销它,这可以从您的 Apple 开发者帐户启动。

因此,Apple 将证书的创建限制为代理,因为只有一个注册了 Apple 开发者帐户并且是合法同意对其负责的人。

【讨论】:

  • 感谢您提供的非常翔实的回答,接下来的 4 天我不上班,并且会告诉您我如何处理这个问题。希望按照您的建议 - 我将获得新证书,这基本上会自行解决。
  • 终于回到了这个问题...我刚刚用我的新证书签署了.app,下载了它并仍然收到错误消息。我检查了标志,它是正确的:Authority=Developer ID Application: Company Pty Ltd (NH73TNDB28)Authority=Developer ID Certification AuthorityAuthority=Apple Root CA那么你认为还有什么?我只签了.app,还有什么要签的吗?
  • @Zze 解决了这个问题吗?我陷入了类似的境地。
  • @spartygw 不幸的是没有。我发了一个交叉帖子apple.stackexchange.com/questions/281366/…,但它存在无穷无尽的问题,我在解决之前移动了项目。
  • 实际上,回到这一点,@TheDarkKnight 的回答是正确的。我正在构建一个 pkg 并使用“3rd Party Mac Developer Installer”对其进行签名,这允许我创建一个 pkg 但不会通过 GateKeeper。如果您阅读 TheDarkKnight 的答案比我第一次说要使用“开发人员 ID 安装程序”签名时更接近。这是我缺少的链接。一旦我使用该证书签名,即使在通过 http 分发并通过 Chrome 下载之后,它也会通过 GateKeeper。为我点赞黑暗骑士!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 2016-01-29
相关资源
最近更新 更多