用java编程重命名JKS别名

时间:2015-08-17 11:20:41

标签: java keystore jks

我想知道如何在java中以编程方式重命名密钥库的别名,而不是使用keytool。

我有java.security.KeyStore个对象,包含某个别名。我怎样才能重命名呢?

1 个答案:

答案 0 :(得分:3)

KeyStore API不为别名提供重命名操作。但你能做的是:

  1. 保存要重命名的密钥库条目的内容(密钥对,证书)。
  2. 删除条目。
  3. 使用已保存的内容和新别名创建新条目。
  4. 作为Java代码:

    Key privateKey = keyStore.getKey(alias, password.toCharArray());
    Certificate[] certs = keyStore.getCertificateChain(alias);
    keyStore.setKeyEntry(newAlias, privateKey, password.toCharArray(), certs);
    keyStore.deleteEntry(alias);
    

    当然,如果私钥存储在硬件设备(智能卡或HSM)上并因此无法读取,则此功能无效。

    如果密钥库条目包含可信证书,则代码看起来有点不同:

    Certificate cert = keyStore.getCertificate(alias);
    keyStore.setCertificateEntry(newAlias, cert);
    keyStore.deleteEntry(alias);