相关疑难解决方法(0)

密钥库更改密码

我目前有一个密钥库,只有我应该知道的密码.我现在需要将该密钥库的访问权限授予其他人,所以我想要:

1)更改密码,以便我可以与他人共享并让他们签名
2)创建不同的密码并允许他们签名.

这可能吗? - 如果是的话 - 怎么样?

java keystore

252
推荐指数
8
解决办法
29万
查看次数

无法恢复密钥

两天前我在Play商店发布了我的应用程序的第一个版本.我使用了一个已知别名和密码的密钥.

然后,我在eclipse中更改了我的应用程序名称,只更改了一个字母.现在,我想在eclipse中导出版本2,尝试从第一次使用密钥并输入别名和密码.我相信他们是对的!!

在最后一步,Eclipse告诉我"无法恢复密钥".我尝试了一个新的,但Play商店显示错误.我能做什么??

编辑:

在此输入图像描述

在此输入图像描述

在此输入图像描述

就像你在第二个图像abobe中看到的那样,它必须是正确的密码,否则别名不会出现在下拉框中.另外第二个密码是正确的,它是第一个密码.我只有一个别名!

最后一张图片中的目的地APK文件链接无关紧要吗?

java eclipse android key

36
推荐指数
3
解决办法
8万
查看次数

无法从KeyStore获取密钥

我试着从KeyStore获取Key.我用Keytool创建了一个密钥库:

keytool -genkeypair -dname"cn = Mark Jones,ou = JavaSoft,o = Sun,c = US"-alias business2 -keypass abcdtest -keystore C:\ workspace\XMLSample\keystore\mykeystore.jks -storepass 123456

以下是GenerateXML.java

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import javax.xml.crypto.dsig.XMLSignContext;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;

public class GenerateXML {

    public static void main(String[] args) throws Exception {

        try {
            char[] passwd = "123456".toCharArray();

            //Load the KeyStore and get the signing key and certificate
            KeyStore ks = KeyStore.getInstance("JKS");
            ks.load(new FileInputStream("C:\\workspace\\XMLSample\\keystore\\mykeystore.jks"), passwd);
            KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry)ks.getEntry("business2", new KeyStore.PasswordProtection(passwd));   // …
Run Code Online (Sandbox Code Playgroud)

java ws-security

26
推荐指数
3
解决办法
9万
查看次数

Android密钥库已损坏

在播放商店中没有更新我的应用程序一段时间后,我尝试使用我的密钥库签署我的一个APK,但却发现密钥库和别名密码不再起作用.我可以使用这个要点重置密钥库密码:gist.github.com/zach-klippenstein/4631307现在工作正常.这适用于两个不同应用程序的两个不同的密钥库.

跑步keytool -list -keystore mykeystore导致:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

myalias, Dec 23, 2014, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 85:8F:69......
Run Code Online (Sandbox Code Playgroud)

我100%确定别名密码与密钥库密码相同,但它似乎不起作用.我已尝试在Android Studio中签署APK,jarsigner -keystore mykeystore -storepass mykeystorepassword app-debug.apk myalias但响应总是:jarsigner: unable to recover key from keystore.

我尝试将别名移动到新的密钥库文件,keytool -importkeystore -srckeystore mykeystore -destkeystore newkeystore -srcalias myalias然后要求我输入新密钥库的新密码和旧密钥库的密码(两者都有效),只有在输入别名密码后才会出现异常:

Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
Enter key password for <myalias>
keytool error: java.security.UnrecoverableKeyException: Cannot recover key
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索后,我发现对于某些人来说,密钥库在更新到另一个JDK版本或Android …

java android keytool jarsigner

24
推荐指数
1
解决办法
3816
查看次数

UnrecoverableKeyException:无法恢复密钥

我有一个服务器端代码加载密钥库的应用程序 -

KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyStoreFile), "password".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "privatepassword".toCharArray());
SSLContext sslCtx = SSLContext.getInstance("TLS");
sslCtx.init(kmf.getKeyManagers(), null, null);
Run Code Online (Sandbox Code Playgroud)

当我在密钥库中只有一个私钥时,这很好用.当我向密钥库添加另一个私钥(使用不同的密码)时,我收到了此错误

    java.security.UnrecoverableKeyException: Cannot recover key
    at sun.security.provider.KeyProtector.recover(KeyProtector.java:311)
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121)
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38)
    at java.security.KeyStore.getKey(KeyStore.java:763)
    at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:113)
    at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48)
Run Code Online (Sandbox Code Playgroud)

然后我尝试创建一个自定义keymanager,如下面的链接中所指定

@Bruno我尝试了你给出的建议.然而,这不起作用.我的定制密钥管理器工厂看起来像这样 -

class CustomKeyManager implements X509KeyManager {
private final KeyStore ks;
private final String alias;

public CustomKeyManager(KeyStore ks, String alias) {
    this.ks = ks;
    this.alias = alias;
}
@Override
public String[] getClientAliases(String paramString,
        Principal[] paramArrayOfPrincipal) {
    return new String[]{alias};
} …
Run Code Online (Sandbox Code Playgroud)

java ssl ssl-certificate

8
推荐指数
1
解决办法
4万
查看次数