如何使用 Mac 钥匙串中的证书对 Java 小程序进行签名?

2022-09-03 08:15:13

我有一个自签名根证书,我的Mac钥匙串中只有代码签名扩展(没有其他扩展名);我使用它来使用Apple的codeign工具对来自∞labs的所有代码进行签名,并且效果很好。

我希望稍微扩展一下自己,并做一些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 获取签名标识的说明创建的。


答案 1

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

从 jarsigner 手册页:

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


答案 2

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

编辑:

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