使用OS X 10.8的新版本,当您尝试启动已签名的Java小程序时,Gatekeeper将弹出以下警告:
applet已使用有效的代码签名证书进行签名,并且可以在其他平台以及以前版本的OS X上正常运行.如果我将"允许从以下位置下载的应用程序"更改为"Anywhere",则它可以正常工作.
据我所知,"数字签名无法验证",实际上意味着"没有使用Mac开发者ID进行签名".
那么:我可以使用Mac开发者ID签署Java小程序吗?我可以使用Mac开发者ID和标准代码签名证书进行签名吗?有更好的方法吗?
我正在尝试最小化为Mac OS X和Windows开发程序所需的代码签名证书的成本.至于我可以告诉大家,我不能使用第三方证书来签名我的OS X程序,并把它拿过去的GateKeeper,指示在这里.
我可以采用其他方式并使用Apple Developer证书签署我的程序的Windows版本吗?
我们公司开发OS X和Windows应用程序.我们从我们用于识别Windows安装程序的非Apple权限机构获得了现有的代码签名证书.我们通过自己的公司网站分发我们的DMG和MSI.
Mountain Lion的新Gatekeeper功能的代码签名指南似乎暗示非Apple发布的标准证书可行.在这种情况下,我可能会误解"第三方"的含义:
注意: Apple使用行业标准的代码签名证书格式和格式.因此,如果您的公司已经拥有用于在其他系统上签名代码的第三方签名身份,则可以将其与OS X codesign命令一起使用...
是否可以使用此非Apple证书,如果可以,如何使用命令行"codesign"命令将其合并?
我的公司为服务器生成Java应用程序并提供JNLP文件以启动本地应用程序.从OSX 10.8.4开始,需要使用开发者ID对JNLP文件进行签名,以保持Gatekeeper的满意度(实际上它位于最底层的发行说明中).
问题是:如何实现这一目标?AFAIK你可以签署应用程序(我们有一些使用开发者ID签名的Java应用程序) - 但JNLP - 文件只是:文件.
下一步:如何使用生成的JNLP文件执行此操作.我们必须修改它们来自服务器 - 例如属性,基本URL等等.
AFAIK Java有一定的机制可以说JNLP文件是通过它们各自的JAR文件(持有主类的文件)签署的 - 但是:Jar文件使用不同的证书进行签名,它们也不会满足Gatekeeper.
我确实找到了一个关于如何签署工具和东西的参考,但它不适用于动态文件的场景.
我不想要的答案:右键单击并打开以覆盖关守或更改系统或Java设置.这不是一个选择.
[更新]自OSX 10.9.5起,您还必须使用OSX 10.9+进行签名并拥有有效的版本2签名.怎么做?
通过查看即将推出的OSX版本(OSX Lion之后的版本)的注释,似乎所有DMG /安装程序都需要签名,即使没有通过Mac App Store分发.
我找不到一个命令行工具来执行此签名,或者有很多关于获取签名证书而不提交到App Store的文档.
有人可以说明:1)如何在不通过Mac App Store分发应用程序的情况下获取证书?2)如何在不使用内置XCode工具的情况下签署DMG(最好是跨平台工具)?
谢谢!
我开发了一个带有Qt5的Mac应用,所以在Xcode之外.我希望GateKeeper允许我的应用程序在客户端的计算机上运行,而不是发出"无法打开,因为无法确认开发人员的身份"警告.
我已成功对该应用程序进行了数字签名,但GateKeeper仍然附带此投诉.我有一个Apple开发人员证书(我是团队代理),我的钥匙串说它是有效的.我还安装了两个Apple根证书.
我使用命令行实用程序codesign
对app文件夹中的所有二进制文件进行数字签名,此外我还对app文件夹本身进行了数字签名.在所有情况下,协同设计的响应都是信息性的,并且没有显示错误.使用codesign我可以检查确实所有二进制文件都已签名,正在运行
$ codesign --verify --deep --verbose=2 MyApp.app
Run Code Online (Sandbox Code Playgroud)
显示所有二进制文件都已验证.此外,它报告:
MyApp.app:在磁盘上有效
MyApp.app:满足其指定要求
运行:
$ codesign -v --verbose=4 --display MyApp.app
Run Code Online (Sandbox Code Playgroud)
给
Executable =/Users/xxx/trunk/yyy/deploy/release/MyApp.app/Contents/MacOS/MyApp
Identifier = aaaa.MyApp
Format = bundle with Mach-O thin(x86_64)
CodeDirectory v = 20200 size = 12461 flags = 0x0 (无)散列= 616 + 3位置=嵌入
散列类型= sha1大小= 20
CDHash = d1c12c783dac0e8d9a2b749fb896b11558cec8b6
签名大小= 8532
授权=开发者ID应用程序:XXXXX
授权=开发者ID证书颁发机构
授权= Apple根CA
时间戳= 29 jul.2015 12; 04:40
Info.plist entries = 8
TeamIdentifier = YYYYY
Sealed Resources version = 2 …
在Mac OS X上,10.9签名的Java Web Start应用程序默认被阻止,并显示以下消息:
"application.jnlp" can't be opened because it is from an unidentified developer.
Run Code Online (Sandbox Code Playgroud)
我知道可以削弱安全检查以允许任何应用程序运行,但这需要最终用户的手动干预.
是否可以"签署"Java Web Start应用程序,使其被识别为源自已识别的开发人员?
谢谢
我试图在osx mavericks 10.9.5上使用格式v2对应用程序包进行编码.在之前的测试中,10.9.5(13F12)的签名一切顺利,所有框架都可以无错误地签名.现在,在13F34,框架无法再签名了.当我尝试用第一个框架签名时:
codesign -f -v -s "Developer ID Application: MY AG" "My.app/Contents/Frameworks/4DJavaScript.framework"
Run Code Online (Sandbox Code Playgroud)
然后发生错误:
My.app/Contents/Frameworks/4DJavaScript.framework: bundle format is ambiguous (could be app or framework)
Run Code Online (Sandbox Code Playgroud)
当我尝试编码签署框架的唯一版本(A)时,签名成功,但在签署主应用程序时,框架上的错误重新出现.在查看框架的info.plist文件时,(在我看来)是类型集的正确条目:
Bundle OS Type code FMWK
Run Code Online (Sandbox Code Playgroud)
有关如何在10.9.5-13F34上正确编码签名框架的任何建议?
谢谢,彼得
所以我们有一个允许我们签署kexts的证书,但是当我们运行> sudo kextload friendly.kext时,它失败了,我们签署了我们想要的kext,并证明它已签名,这里是一些诊断输出:
codesign --verify -vvvv friendly.kext
friendly.kext: valid on disk
friendly.kext: satisfies its Designated Requirement
Run Code Online (Sandbox Code Playgroud)
spctl -a -vvvv friendly.kext
friendly.kext: accepted
source=Developer ID
origin=Developer ID Application: Friendly Corporation
/Library/Extensions
Run Code Online (Sandbox Code Playgroud)
codesign -dvvv friendly.kext
Executable=/Library/Extensions/friendly.kext/Contents/MacOS/friendly
Identifier=com.friendly.friendly
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=502 flags=0x0(none) hashes=18+3 location=embedded
Hash type=sha1 size=20
CDHash=a1e2bf8d53ea67c6cfe9fc3d6d2001fe56c838a7
Signature size=8528
Authority=Developer ID Application: Friendly Corporation
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Oct 9, 2014, 11:49:02 AM
Info.plist entries=21
TeamIdentifier=1234567890
Sealed Resources version=2 rules=12 files=1
Internal requirements …
Run Code Online (Sandbox Code Playgroud) 脚本
我想发布适用于Mac OS X的应用程序,但不是在AppStore上.该应用程序运行在10.6 - 10.8及以上.
问题
Apple要求开发人员签署Mac OS X 10.8+的所有应用程序以通过Gatekeeper.除非我告诉每个用户暂时禁用并重新启用我的应用程序的网守,根据此文档和Mountain Lion更改日志...我的应用程序将不被允许运行.
根据Apple网站上的措辞,听起来我必须每年支付99.00美元的证书.但是,我不想支付99美元 - 我不会发布到AppStore!
题
有没有什么办法可以在10.8+上支付99美元的费用?我知道我的应用程序将在10.6上运行和10.7,但根据Apple的说法,如果没有证书,将不允许在10.8上运行.真的吗?如果没有99美元的分发证书,我如何分发10.8+(最好是DMG)?提前致谢!
编辑#1
macos software-distribution osx-mountain-lion osx-gatekeeper
osx-gatekeeper ×10
macos ×7
code-signing ×6
java ×3
jnlp ×2
applet ×1
cocoa ×1
codesign ×1
frameworks ×1
xcode ×1