【发布时间】: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 所以现在无法找回密码了?
-
这就是密钥存储的目的——安全地存储密钥,以便只有知道密码的人才能使用密钥。