未找到证书链,如何修复并发布到Google Play商店?

时间:2014-05-20 02:49:54

标签: android keytool jarsigner jar-signing

错误消息

jarsigner: Certificate chain not found for: project_foo.<br/>
project_foo must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.

问题: 如何包含公钥证书链以解决错误?

背景: App Developer已经完成了一个Android应用程序,并提供了一个名为Foo.apk的未签名APK。我的目标是对APK进行签名和压缩,以准备将其上传到Google Play商店。我的密钥库位于Windows机器上的C:\ Path \ .keystore。

命令行,我的命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore C:\Path\\.keystore Foo.apk project_foo

命令行,回复:

Enter Passphrase for keystore:
jarsigner: Certificate chain not found for: project_foo.<br/>
project_foo must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.

还试过: 验证我记得正确的密码。使用&#39; keytool -list&#39;从命令行显示预期列表(它包括一个私钥)。

以前的操作系统问题certificate chain not found询问使用Verisign的.cer文件。我没有类似的文件。

其他信息:Windows 7计算机,使用标准Windows命令提示符。

6 个答案:

答案 0 :(得分:83)

keytool -keystore formconnect.keystore -list -v

生成密钥后,您可以使用此命令查找别名。

第一行执行包含别名:<value>如果使用keytool,则别名可能是“mykey”。

打包应用程序时使用该别名。

答案 1 :(得分:8)

我有同样的问题 我的命令是

生成密钥

 keytool -genkey -v -keystore testapp-key.keystore -alias testapp-key -keyalg RSA -keysize 2048 -validity 10000

然后我这样做是为了对应用进行签名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore testapp-key.keystore testapp.apk testapp

我收到了这个错误

jarsigner: Certificate chain not found for: testapp.<br/>
project_foo must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.

然后我用jarsignir命令中的别名'testapp'替换了'testapp-key'的键别名它是第一个命令,即密钥生成命令< / p>

命令看起来像这样

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore testapp-key.keystore testapp.apk testapp
在你的情况下,它会像这样

 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore C:\Path\\.keystore Foo.apk your-key-alias

答案 2 :(得分:3)

我们团队的开发人员提出了解决问题的解决方案。以前我使用jarsigner.exe将Foo.apk复制到目录中并尝试在那里运行它。他提议:

  1. 设置PATH环境变量,以便Windows可以找到jarsigner可执行文件。
  2. 将Foo.apk移动到密钥库所在的路径。
  3. 运行以下命令(不使用路径查找密钥库)。
  4. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore .keystore Foo.apk project_foo
    

    有效!删除指定密钥库的文件路径的必要性修复了问题。

答案 3 :(得分:1)

添加release unsigned.apk文件夹路径

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystorename.keystore ..... \ platforms \ android \ build \ outputs \ apk \ android-release-unsigned.apk aliasname

它为我工作!!

答案 4 :(得分:0)

如果您尝试从Android Studio中对.aab或.apk进行签名,但是即使您所做的一切正确,但仍会收到此错误,那么以下解决方案对我有用: 转到搜索并找到命令提示符。以管理员身份运行。现在键入此行。

"C:--->Your Path To jarsiner<---\jdk1.8.0_192\bin\jarsigner" -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore "C: **--->Your Path To the Keystore<---**\Desktop\OfficalBuilds\MyKey.keystore" "C:**--->Your Path To the .apk Or .aab<---**\Desktop\MyFinalBuild.aab"  "My Alias "

如果您尝试了上述解决方案,您会发现现在在“”中键入了别名。有时在“我的别名”末尾还有一个空格。

答案 5 :(得分:0)

您必须使用别名来命名已签名的应用

例如:

如果您使用此名称“ myFirstSignedApp”作为别名,则必须在jarsigner命令中确定该名称

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore testapp.keystore app-release-unsigned.apk myFirstSignedApp