以编程方式使用 java 重命名 JKS 别名
Rename JKS alias with java programmatically
我想知道如何在 java 中以编程方式重命名密钥库的别名,而不是使用 keytool。
我有我的 java.security.KeyStore
对象,其中包含某个别名。我如何重命名它?
KeyStore API 不提供别名的重命名操作。但你能做的是:
- 保存要重命名的密钥库条目的内容(密钥对、证书)。
- 删除条目。
- 使用保存的内容和新别名创建一个新条目。
作为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);
我想知道如何在 java 中以编程方式重命名密钥库的别名,而不是使用 keytool。
我有我的 java.security.KeyStore
对象,其中包含某个别名。我如何重命名它?
KeyStore API 不提供别名的重命名操作。但你能做的是:
- 保存要重命名的密钥库条目的内容(密钥对、证书)。
- 删除条目。
- 使用保存的内容和新别名创建一个新条目。
作为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);