【问题标题】:display alias password from keystore certificate显示密钥库证书中的别名密码
【发布时间】:2013-08-22 08:58:00
【问题描述】:

我使用下面的代码显示与我的密钥库证书关联的别名,它工作正常,现在 如何显示别名密码?有什么办法吗。

public class keyaliasfinder {

    public static void main(String args[])
    {
        FileInputStream is = null;
        try {

            File file = new File("c:\\my_keystore");
            is = new FileInputStream(file);
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            String password = "FnvUKHdr6b4343dfdf";
            keystore.load(is, password.toCharArray());

            PrivateKey p=new PrivateKey() {

                @Override
                public String getFormat() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public byte[] getEncoded() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public String getAlgorithm() {
                    // TODO Auto-generated method stub
                    return null;
                }
            };


            Enumeration enumeration = keystore.aliases();
            while(enumeration.hasMoreElements()) {
                String alias = (String)enumeration.nextElement();
                System.out.println("alias name: " + alias);
                Certificate certificate = keystore.getCertificate(alias);
                System.out.println(certificate.toString());

            }

        } catch (java.security.cert.CertificateException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(null != is)
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
}

【问题讨论】:

  • 必须提供密码才能从密钥库中读取私钥。你必须知道它。它不存储在密钥库中。
  • @Robert 但是我在哪里提到这个密码你说的是已经存在的密钥库密码。
  • @Robert 当然它存储在 KeyStore 中。但是当然没有 API 可以检索它。否则 KeyStore API 将不安全。
  • @EJP 所以现在无法找回密码了?
  • 这就是密钥存储的目的——安全地存储密钥,以便只有知道密码的人才能使用密钥。

标签: java security


【解决方案1】:

我对你的问题有点困惑。如果您尝试取回别名密码,则密码不作为明文密码存在。密码用于通过基于密码的派生功能生成加密密钥,该密钥用于保护您的私钥。但是,如果您正在寻找一个 API 来传递您的别名密码,一旦您使用密钥库密码加载密钥库(这就是您所做的),您可以按如下方式传递别名密码。

Key privateKey = keystore.getKey(String alias, char[] aliasPassword)

KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(aliasPassword);

//Get my private key
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)ks.getEntry("privateKeyAlias", protParam);
PrivateKey myPrivateKey = pkEntry.getPrivateKey();

【讨论】:

  • 我正在尝试取回别名密码,正如您提到的那样,与明文密码不存在的相同密码是否有任何解决方法或破解方法以及获取它所需的数据是什么返回
猜你喜欢
  • 2011-08-09
  • 2011-08-08
  • 2018-08-06
  • 2018-08-06
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
相关资源
最近更新 更多