密钥库更改密码

313

我目前拥有一个密钥库,只有我知道特定的密码。现在我需要让其他人访问这个密钥库,因此我想要:

1)更改密码,以便我可以与他人共享并让他们签署
2)创建不同的密码并允许他们使用它进行签名。

这可行吗?如果是,怎么操作?

8个回答

567

密钥库只有一个密码。您可以使用keytool更改它:

keytool -storepasswd -keystore my.keystore
改变密钥的密码:
keytool -keypasswd  -alias <key_name> -keystore my.keystore

7
好的,那么apk的签名将保持不变吗?只是密码会改变?这正是我所需要的。我选了个糟糕的密码,现在需要更改它。 - Matthew Rudy
7
签名不会改变,因为应用程序没有使用密钥库进行签名,而是使用你在密钥库中保存的证书进行签名。 - Marcin Orlowski
30
为了移除密钥的密码,需要将密钥库的密码设置为相同的密码,这可能对某些人有用;-) - Betlista
1
@Betlista 加一分给那些记得点上i和划掉t的人! - qualebs
3
发现了这个工具,它可以更直观地查看jks文件:http://keystore-explorer.org/index.html - Bogdan
显示剩余7条评论

96

如何更改密码以便与他人共享并让他们签署?

使用keytool:

keytool -storepasswd -keystore /path/to/keystore
Enter keystore password:  changeit
New keystore password:  new-password
Re-enter new keystore password:  new-password

这会同时更改密钥内部的密码吗? - over_optimistic
5
不。密钥库(Keystore)和密码(注意复数形式)是两个不同的东西。使用 keytool -keypasswd -alias <KeyName> -keystore my.keystore 来更改私钥 <KeyName> 的密码。 - Marcin Orlowski
7
输入密钥库密码-changeit后,出现错误:keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect。 - Dilip
@Dipu,我也遇到了同样的错误。你解决了吗? - JiteshW
如果你怀疑密码是否已更改,可以再次运行完全相同的命令来进行验证。在提示输入现有密码后,如果你输入了错误的密码,它将会提示你输入的密码不正确或者文件已被篡改,并终止操作。 - ArtOfWarfare
对我来说也是一样的。"changeit" 不起作用。我猜 Android Studio 与 Gradle 在第一次构建应用程序时生成了我的密钥库。有人知道如何查看或重置由 Android Studio 生成的密码吗? - Liker777

53

更改密钥库密码

$ keytool -storepasswd -keystore keystorename
Enter keystore password:  <old password>
New keystore password: <new password>
Re-enter new keystore password: <new password>

更改密钥库别名密码

$keytool -keypasswd -keystore keystorename -alias aliasname
Enter keystore password:  
New key password for <aliasname>: 
Re-enter new key password for <aliasname>:

注意:

**Keystorename**: name of your keystore(with path if you are indifferent folder) 
**aliasname**: alias name you used when creating (if name has space you can use \) 
for example: $keytool -keypasswd -keystore keystorename -alias stop\ watch

1
它可以工作,谢谢!还有一件事我想添加,就是更改别名名称,这个别名名称我从论坛上得到了。keytool -changealias -keystore my.keystore -alias my_name -destalias my_new_name - Jugal Panchal
更改别名密码时出现以下错误:UnrecoverableKeyException: 无法恢复密钥。有什么建议吗? - Foo
@Foo,你解决那个问题了吗?我也遇到了同样的错误。 - Ryan Newman
3
更改密钥库别名密码,无论您展示什么都不起作用,它不会要求输入<别名>的新密钥密码。它要求输入<别名>的现有密码,而这在此情况下是未知的。 - Shivaraj Patil
我仍然在步骤中遇到“无法恢复密钥: <aliasname>的新密钥密码”错误。有什么想法吗?我刚刚在Android Studio中创建了密钥,上传了它,意识到需要更新一些内容,现在它不起作用了 :/ - Dewald Els

23

要更改密钥库mykeyfile中别名为myalias的密钥的密码:

keytool -keystore mykeyfile -keypasswd -alias myalias

什么是“内部键”? - IgorGanapolsky
5
抱歉我的解释不够清晰。您可以更改密钥库的密码或存储在密钥库中的某个密钥的密码。这就是我所说的“内部密钥”。 - OriolJ

10

KeyStore Explorer 是一个开源的 GUI 工具,可以替代 Java 命令行工具 keytool 和 jarsigner。通过直观的图形用户界面,KeyStore Explorer 展示了它们的功能以及更多。

  1. 打开现有的 KeyStore
  2. 在“工具”菜单中选择“设置 KeyStore 密码”

最佳解决方案!比写入终端更好。使用这个软件,我能够更改密码并添加新的密钥对。强烈推荐。 - Dan Alboteanu
太棒了,这个小应用程序运行得非常好! - Leon

10

对于完全的程序化更改(例如安装程序)且无需提示

#!/bin/bash -eu

NEWPASSWORD=${1}
OLDPASSWORD=${2}

keytool -storepasswd -new "${NEWPASSWORD}" \
  -storepass "${OLDPASSWORD}" \
  -keystore /path/to/keystore

完全透露:我不建议在shell中运行此命令行,因为旧密码和新密码将保存在shell的历史记录中,并在控制台中可见。


8
如果密钥库中包含其他具有不同密码的密钥条目,则您也必须更改它们,或者您可以使用以下命令将您的密钥隔离到不同的密钥库中:
keytool -importkeystore  -srckeystore mystore.jck -destkeystore myotherstore.jks -srcstoretype jceks
-deststoretype jks -srcstorepass mystorepass -deststorepass myotherstorepass -srcalias myserverkey
-destalias myotherserverkey -srckeypass mykeypass -destkeypass myotherkeypass

6

这里有很多答案,但如果你想在Android Studio的Mac上更改jks密码,下面是我能找到的最简单的步骤:

1)打开终端并cd到.jks文件所在的位置

2)keytool -storepasswd -new NEWPASSWORD -keystore YOURKEYSTORE.jks

3)输入当前密码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接