【问题标题】:Jarsigner: certificate chain not found forJarsigner:找不到证书链
【发布时间】:2011-03-16 09:52:51
【问题描述】:

我已将证书导入到私有~/.keystore 文件中:

keytool -list
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

mylyn-mantis, Jul 15, 2010, trustedCertEntry

我正在尝试用它签署一个 jar,但我收到“找不到证书链”错误。

jarsigner -verbose  /home/robert/file.jar mylyn-mantis
jarsigner: Certificate chain not found for: mylyn-mantis.  mylyn-mantis must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.

我该如何解决这个问题?

【问题讨论】:

    标签: java keytool jarsigner


    【解决方案1】:

    您的密钥库似乎只包含一个证书(公钥),您需要一个完整的密钥条目、一个私钥和整个证书链才能签署任何内容

    【讨论】:

    • 谢谢。我从 CA 收到了此证书。我怎样才能生成一个与之配套的私钥?
    • 这必须预先完成:您必须生成一个带有自签名证书的密钥对,然后向您的 CA 请求为您的证书签名。
    • 如何使用 CA 提供的通配符证书?在这种情况下没有本地私人。
    • 我在使用keytool时不小心忘记添加别名时出现了这个问题
    • 我遇到了相反的问题,你能帮帮我吗?我认为 -keygen 应该生成公钥和私钥,但根据这个问题stackoverflow.com/questions/19186643/… 似乎不是。想法?
    【解决方案2】:

    我遇到了同样的问题。我有 CA 发布的 .p12 文件,我正在尝试签署 jar 文件。但是我遇到了错误:

    jarsigner: Certificate chain not found for:
    

    基本上我是从控制台复制别名。它有错误的字符“问号”(?)导致此错误。相反,我将keytool 的输出重定向到文本文件,然后从那里复制别名。

    1. 发出这个命令:

      keytool -list -v -storetype pkcs12 -keystore "mycertificate.p12" > cert.txt

    (这很重要。总是重定向到txt文件。不要从控制台输出复制。它可能包含错误的字符)

    1. 找出证书中的别名。打开 cert.txt 并复制“别名:”前面提到的字符串

    假设这个字符串是“我的别名,a.p.'s my ca limited id”

    1. 使用 jarsigner:

      jarsigner -storetype pkcs12 -keystore "mycertificate.p12" myjarfile.jar "我的别名,a.p.'s my ca limited id"

    【讨论】:

      【解决方案3】:

      我遇到了这个错误,但这是一个不同的问题。当您将 CSR 发送给 CA 时,它来自具有您生成的特定别名的特定私钥。当您再次收到证书时,必须使用相同的别名导入它,否则这两个证书将不会连接在一起。

      如果你做得对,当你使用 keytool -list -v 你会看到一个带有别名的条目,类型

      Entry type: PrivateKeyEntry
      Certificate chain length: 3
      

      对于条目。 如果你做错了,你将有两个条目

      Entry type: PrivateKeyEntry
      Certificate chain length: 1
      

      Entry type: trustedCertEntry
      

      【讨论】:

      • 您的 cmets 使用相同的别名是我的问题的关键 - 幸运的是没有花太多时间找到这个宝石。
      【解决方案4】:

      简答

      像这样使用您的别名密钥而不是密钥库:

      jarsigner -verbose -keystore [Your signature storage path] -signedjar [signed filename] [unsigned filename] [Your alias key]
      

      更多详情

      以下是解决此错误的最简单方法:

      1. 转到 bin 文件夹 .. 它可能在此路径中:

      C:\Users[你的电脑名]\jdk\bin

      或这条路径:

      C:\Program Files\Java\jre1.8.0_77\bin

      1. 为防止配置环境变量引起的问题,请将要签名的空包你的密钥库[签名的私钥]复制到JDK下的bin目录

      2. 通过运行以下命令获取您的别名键:

        keytool -keystore [your key store] -list -v

      3. 最后运行这个命令:

        jarsigner -verbose -keystore [Your signature storage path] -signedjar [signed filename] [unsigned filename] [Your alias key]

      【讨论】:

        猜你喜欢
        • 2011-07-12
        • 2012-01-13
        • 2011-12-24
        • 2018-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 2021-02-28
        相关资源
        最近更新 更多