我已将证书导入私有~/.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.
我该如何解决这个问题?
答案 0 :(得分:14)
您的密钥库似乎只包含一个证书(公钥),您需要一个完整的密钥条目,一个私钥,以及整个证书链,以便能够签署任何内容
答案 1 :(得分:1)
我遇到了这个错误,但这是一个不同的问题。当您将CSR发送给CA时,它来自具有您生成的特定别名的特定私钥。当您再次收到证书时,您 必须使用相同的别名导入该证书 ,否则这两个证书将不会连接在一起。
如果操作正确,当您使用keytool -list -v时,您将看到一个别名类型为
的条目。Entry type: PrivateKeyEntry
Certificate chain length: 3
用于输入。 如果做错了,您将有两个条目
Entry type: PrivateKeyEntry
Certificate chain length: 1
和
Entry type: trustedCertEntry
答案 2 :(得分:1)
简答
使用您的别名密钥而不是这样的密钥库:
jarsigner -verbose -keystore [Your signature storage path] -signedjar [signed filename] [unsigned filename] [Your alias key]
更多详情
以下是解决此错误的最简单方法:
C:\Users[您的计算机名]\jdk\bin
或此路径:
<块引用>C:\Program Files\Java\jre1.8.0_77\bin
为防止环境变量的配置引起的问题,请将要签名的空包和您的密钥库 [私钥用于签名]到JDK下的bin目录。
通过运行以下命令获取别名密钥:
keytool -keystore [your key store] -list -v
最后运行这个命令:
jarsigner -verbose -keystore [Your signature storage path] -signedjar [signed filename] [unsigned filename] [Your alias key]
答案 3 :(得分:0)
我遇到了同样的问题。我有CA发行的.p12文件,并且我正在尝试签名jar文件。但是我遇到了错误:
jarsigner: Certificate chain not found for:
基本上,我是从控制台复制别名。错误的字符“问号”(?)导致了此错误。相反,我将keytool
的输出重定向到文本文件,然后从那里复制了别名。
发出此命令:
keytool -list -v -storetype pkcs12 -keystore“ mycertificate.p12”> cert.txt
(这非常重要。始终重定向到txt文件。请勿从控制台输出中复制。它可能包含错误的字符)
让我们说这个字符串是“我的别名,a.p是我的ca受限ID”
使用jarsigner:
jarsigner -storetype pkcs12 -keystore“ mycertificate.p12” myjarfile.jar“我的别名,a.p.是我的ca受限ID”