24

我已将证书导入私人~/.keystore文件:

keytool -list
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

mylyn-mantis, Jul 15, 2010, trustedCertEntry

并试图用它签署一个罐子,但我得到一个“找不到证书链”错误。

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.

我怎么解决这个问题?

4

4 回答 4

16

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

于 2010-07-15T13:30:30.050 回答
3

我面临同样的问题。我有 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 并复制“别名:”前面提到的字符串

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

  1. 使用 jarsigner:

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

于 2019-12-17T00:30:03.647 回答
3

简答

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

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]

于 2021-01-11T08:15:58.100 回答
2

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

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

Entry type: PrivateKeyEntry
Certificate chain length: 3

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

Entry type: PrivateKeyEntry
Certificate chain length: 1

Entry type: trustedCertEntry
于 2020-07-27T13:35:36.023 回答