16

我的 Mac 钥匙串中只有代码签名扩展(没有其他扩展)的自签名根证书;我用它来签署所有来自∞实验室的代码,使用 Apple 的代码设计工具,它工作得很好。

我正在寻求扩展自己并进行一些 Java 开发。我知道Apple提供了一个从钥匙串中读取的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 获取签名身份的说明创建的。)

4

3 回答 3

1

我认为您的密钥库条目别名一定是错误的。您是否使用条目类型为“keyEntry”的密钥库对象的别名?相同的命令对我来说非常有效。

从 jarsigner 手册页:

使用 jarsigner 对 JAR 文件进行签名时,您必须为包含生成签名所需的私钥的密钥库条目指定别名。

于 2008-09-26T03:13:44.970 回答
0

我也一直在尝试这样做。我经历了一些扭曲,使用密钥库资源管理器,我丢失了我的公钥。我可以从私钥中恢复它吗?,我能够从 .keystore 文件中提取证书、私钥和公钥,并将它们移动到 OSX 钥匙串中。请注意,在这种情况下,我可能不需要公钥。

如果我给 jarsigner 私钥的名称(而不是我基于该密钥的自签名证书的名称),那么我会收到您提到的错误。

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

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

我可以使用您的 jarsigner 命令行(谢谢!)并获得正确的结果,我使用 jarsigner -verify 进行了检查。

于 2013-07-26T00:34:03.060 回答
0

您是否尝试过从苹果钥匙串中导出密钥并通过 keytool 导入?也许 Apple 没有将 keytool 与他们的钥匙串正确集成(不像他们在支持 Java 方面有着出色的记录)。

编辑:

嗯...我刚刚尝试从我导入到苹果钥匙串(具有私钥/公钥)的java商店中获取一个有效的密钥,但它不起作用。所以我的导入是错误的,你不能以这种方式访问​​苹果钥匙串,或者其他事情出错了:-)

于 2009-02-28T18:59:08.690 回答