代码之家  ›  专栏  ›  技术社区  ›  millenomi

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

  •  16
  • millenomi  · 技术社区  · 17 年前

    我有一个自签名的根证书,在我的mac密钥链中只有代码签名扩展(没有其他扩展);我使用它来使用苹果的代码签名工具对来自实验室的所有代码进行签名,它工作得很好。

    我想扩大一下自己,做一些Java开发。我知道苹果提供了一个从钥匙链读取的实现,我可以列出我在链中的所有证书:

    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 回复  |  直到 13 年前
        1
  •  1
  •   bd808    17 年前

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

    从JaveNeer-man页面:

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

        2
  •  0
  •   TofuBeer    17 年前

    你试过从苹果钥匙链中导出钥匙并通过keytool导入吗?也许苹果没有正确地将KioToice与他们的密钥链集成在一起(不像他们有支持Java的一段历史记录)。

    编辑:

    隐马尔可夫模型。。。我只是尝试了一个键,从Java商店,我导入到苹果密钥链(有一个私人/公钥),它不起作用。所以,如果我的输入错误,你就不能用这种方式访问苹果的密钥链,否则就会出问题。

        3
  •  0
  •   Community Mohan Dere    9 年前

    我也一直在努力做到这一点。我做了一些扭曲,使用keystore explorer和 I lost my public key. Can I recover it from a private key? 我能够从.KestSo蓄文件中提取证书、私钥和公钥,并将它们移动到OSX密钥链中。注意,在这种情况下,我可能不需要公钥。

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

    我猜你的问题是

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

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