java – 使用keytool删除密钥库中的别名是否删除了私钥?

所以如果我有一个公共证书坐在一个密钥库中将使用密钥工具删除它也删除私钥信息?

生成CSR并使用外部CA签署证书然后导入.

我认为别名可以是你做的任何东西,删除别名指定的证书会删除证书本身和相应的私钥吗?

是否可以在不影响关键信息的情况下更改别名?也可以在不同的别名下导入相同的证书并仍然有效(即与私钥匹配)?

我问的原因是在导入证书时我希望看到它列为类型为privatekeyentry而不是trustcertentry,它当前显示为,不知道为什么.

证书我们是一个root和inter之前添加并显示确定.

更新:

感谢您的答复.因此,为了澄清我的理解并确保我做对了,重命名私钥条目的别名是有效的,因为证书和密钥在这一个Alias下保持在一起.删除私钥条目类型的别名也是如此,该类型将删除证书和密钥.

回到我原来的一个问题,证书是否可以在不同的别名下再次导入,并且仍然与商店中的私钥相匹配?根据信息ID说不,它需要使用先前为私钥设置的别名.

我认为混淆和复杂性在于私钥永远不会离开密钥库,它是在创建CSR时生成的,因此永远不会与证书同时导入.

我的问题是导入的证书显示为trustedcert条目,所以我猜它不匹配商店中的私钥.

是否在执行CSR生成时指定了私钥的别名?如果是这种情况,是否可能在不同的别名下导入签名证书会导致两者不匹配?我能想到的另一件事就是使用了错误的CSR.

最佳答案 作为不同密钥库条目类型的源代码,一切都很清楚. Keystore支持三种类型:

> KeyStore.PrivateKeyEntry
> KeyStore.SecretKeyEntry(在我们讨论证书和私钥时,将在此答案中忽略)
> KeyStore.TrustedCertificateEntry

我们来详细说明:

KeyStore.PrivateKeyEntry类型有三个字段:

private final PrivateKey privKey;
private final Certificate[] chain;
private final Set<Attribute> attributes;

区别在于KeyStore.TrustedCertificateEntry类型只有两个:

private final Certificate cert;
private final Set<Attribute> attributes;

如果枚举条目,则只能获得一个证书密钥条目.因此,它似乎存储在PrivateKeyEntry中.作为组合证书和密钥并将其链接到一个别名重命名别名将影响密钥和证书.

由于密钥库中的每个条目完全独立于其他条目,因此只要每个条目具有其自己的唯一别名,就可以导入相同的密钥和证书数十次.

顺便说一句:我记得密钥库甚至允许有多个相同别名的条目(不知道所有密钥库格式是否都是这样).在这种情况下,您只能通过它的别名访问第一个条目.只有在枚举所有条目时才能访问另一个.

点赞