如何使用Mac密钥链中的证书签署Java小程序?

时间:2008-09-23 21:09:08

标签: java macos certificate signing keychain

我的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之后创建的。)

3 个答案:

答案 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提供私钥的名称(而不是基于该密钥的自签名证书的名称),那么我会收到你提到的错误。

我的猜测是你的问题是以下之一

  • 您的钥匙串包含证书但不包含私钥
  • 您的钥匙串包含私钥,但不包含证书
  • “infinitelabs_codesigning_2”是指私钥而不是证书

我可以使用你的jarsigner命令行(谢谢!)并得到正确的结果,我用jarsigner -verify检查过。