我的Mac密钥链中只有代码签名扩展(没有其他扩展名)的自签名根证书;我用它来使用Apple的代码签名工具签署来自∞labs的所有代码,并且效果很好。
我希望扩展自己一点并进行一些Java开发。我知道Apple提供了一个从Keychain读取的KeyStore实现,我可以列出我在'链中的所有证书:
keytool -list -provider com.apple.crypto.provider.Apple -storetype KeychainStore -keystore NONE -v
但是,每当我尝试使用jarsigner签署一个简单的测试JAR文件时,我最终都会:
$ jarsigner -keystore NONE -storetype KeychainStore -providerName Apple a.jar infinitelabs_codesigning_2
Enter Passphrase for keystore: <omitted>
jarsigner: Certificate chain not found for: infinitelabs_codesigning_2. infinitelabs_codesigning_2 must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.
我做错了什么?
(证书是在Apple's instructions for obtaining a signing identity之后创建的。)
答案 0 :(得分:1)
我认为你的密钥库条目别名一定是错的。您是否使用条目类型为“keyEntry”的密钥库对象的别名?同样的命令对我来说非常合适。
来自jarsigner手册页:
使用jarsigner对JAR文件进行签名时,必须为包含生成签名所需私钥的密钥库条目指定别名。
答案 1 :(得分:0)
您是否尝试从Apple钥匙串导出密钥并通过keytool导入?也许Apple没有将keytool与他们的钥匙串正确集成(不像他们在支持Java方面有着出色的记录)。
编辑:
嗯......我刚刚尝试从我导入的Java商店中使用了一个密钥,这个密钥导入了苹果钥匙串(有一个私钥/公钥)并且它不起作用。所以我的导入是错误的,你不能以这种方式访问苹果钥匙串,或者别的东西出错: - )
答案 2 :(得分:0)
我一直在努力做到这一点。我经历了几次扭曲,使用Keystore Explorer和I lost my public key. Can I recover it from a private key?,我能够从.keystore文件中提取证书,私钥和公钥,并将它们移动到OSX钥匙串中。请注意,在这种情况下,我可能不需要公钥。
如果我给jarsigner提供私钥的名称(而不是基于该密钥的自签名证书的名称),那么我会收到你提到的错误。
我的猜测是你的问题是以下之一
我可以使用你的jarsigner命令行(谢谢!)并得到正确的结果,我用jarsigner -verify检查过。