我目前在macOS上使用packaged and signed分发Java应用程序pkgbuild
。
最近,Apple警告开发者:
“在即将发布的macOS版本中,Gatekeeper将要求开发者ID签名的软件由Apple提供notarized。”
在阅读公证文件后,苹果warns developers:
“你必须启用hardened runtime才能让你的应用程序被Apple公证。”
其中详细介绍了如何在Xcode中切换这些设置。但是不是用Xcode开发的应用程序呢? Xamarin/Mono have some back and forth关于他们如何处理这个问题,但到目前为止提交的内容似乎都集中在Mojave检测和C / C ++上。那些不分发任何C / C ++ / Objective-C编译代码的Java应用程序或应用程序呢?项目如何得到“公证”,以便它不会被未来的macOS更新阻止?
可能相关:How to codesign and enable the hardened runtime for a 3rd-party CLI on Xcode?
关于需要公证的Java项目,我正在回答这个问题。稍作修改,答案也适用于其他类型的项目(python,powershell,node)。
注意:在发布此文件时,Apple的公证命令允许以下程序工作,但随着公证和安全性变得更加普遍并且更严格地执行,Apple将不可避免地改变和改进强化要求和程序。请根据需要编辑,评论或重新回答。
.pkg
或.app
),公证应该通过。在公证期间,Apple将提取.jar
并寻找本地库。如果发现任何未签名的内容,则会被拒绝。如果没有,你没事。使用xcrun
进行公证的说明如下。.dylib
,.jnilib
)的本机调用(例如JNI)的Java应用程序,必须使用“应用程序”(例如developerID_application.cer
)证书对每个捆绑库进行签名。
证书,标识符和配置文件,(点击“iOS,tvOS,watchOS”下拉列表)macOS,开发者ID应用程序。 (也可以说“与Kext”)。
如果您没有此证书,则需要使用CSR申请。就我而言,我最初只有包装安装人员的证书(不是代码签名)。如果您对两个证书使用相同的私钥,则此过程可能会变得棘手。如果卡住,请通过命令行(而不是openssl
)使用Keychain Access
。
获得证书后,签署每个本地库.dylib|.jnilib|.so|bin
gets tricky。一般的想法是对本机库使用codesign
命令,以便它作为开发人员签名。语法是:
xargs codesign -s "P6DMU6694X" -v dependency.dylib
...其中P6DMU6694X
是唯一的开发者ID或确切的证书Common Name(要么工作)。
对于.jar
文件,这可以是particularly cumbersome,因为每个包需要被提取,签名然后压缩回来。xcrun
发送包进行公证。
xcrun altool --eval-app --primary-bundle-id <bundle id> -u <iTunes Connect帐户> -f <文件路径>
这看起来像这样:
xcrun altool --eval-app --primary-bundle-id com.domain.appname -u [email protected] -f appname.pkgxcrun
命令将返回一个唯一的ID,可用于确定公证是否已获批准。
RequestUUID = a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6
xcrun altool --eval-info a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6 -u [email protected]
LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/...
Ready for distribution
。
{
"logFormatVersion": 1,
"jobId": "a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6",
"status": "Accepted",
"statusSummary": "Ready for distribution",
"statusCode": 0,
"archiveFilename": "appname.pkg",
"uploadDate": "2018-10-26T05:41:12Z",
"sha256": "e2350bda66...",
"issues" null
}
除了上面的tresf答案之外,如果您的应用程序是沙箱(可能即使没有),那么加载JVM时加固的运行时将失败。要解决此问题,您需要在签名时为权利添加一些密钥。下面是必要的权利条目,复制自TAO ZHOU的解决方案:https://bitbucket.org/infinitekind/appbundler/issues/39/build-with-hardened-runtime
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>