我的代码签名DMG被GateKeeper拒绝

时间:2018-12-12 18:50:07

标签: macos codesign dmg

我试图在由自签名代码证书(使用“钥匙串证书助手”生成)签名的DMG卷中分发应用程序(由自身代码签名)。

我正在使用macOS Mojave,并且正在按照以下步骤创建DMG:

  1. 创建一个新的空文件夹testsrc
  2. 将代码签名的应用捆绑包复制到新文件夹中
  3. 运行

    hdiutil create -volname test -srcfolder testsrc -ov -format UDBZ test.dmg
    
  4. 对DMG进行代码签名:

    codesign -s keyid test.dmg
    

此操作成功(无错误消息,返回代码0)。此外,再次尝试执行codesign会导致消息“ test.dmg:已被签名”。我可以验证签名:

codesign -vvvv -d test.dmg
Executable=/path/to/test.dmg
Identifier=test
Format=disk image
CodeDirectory v=20100 size=291 flags=0x0(none) hashes=1+6 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=73…
Hash choices=sha256
Page size=none
CDHash=73… (same as above)
Signature size=1760
Authority=keyid
Signed Time=12 Dec 2018 at 18:26:31
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=96

但是,当我尝试打开隔离区(从localhost下载)DMG时,会收到通常的Gatekeeper错误消息:

Gatekeeper: "“test.dmg” can’t be opened because it is from an unidentified developer"

此外,spctl -v -a -t open --context context:primary-signature test.dmg告诉我:“ test.dmg:已拒绝”。

这纯粹是因为我的证书是自签名的,而不是Apple Developer ID应用程序证书吗?有办法解决吗?


我在How to add codesigning to dmg file in mac中看到了答案,但他们认为上述过程应该可以解决。

1 个答案:

答案 0 :(得分:2)

  

这纯粹是因为我的证书是自签名的,而不是Apple Developer ID应用程序证书吗?

简而言之:是的。

使用Apple签署的开发人员证书中的密钥后,错误消失了,应用程序现在已通过Gatekeeper的验证。