use*_*866 5 java ssl cryptography certificate keytool
因此,如果我在密钥库中有一个公共证书,是否会使用密钥工具删除它也会删除私钥信息?
生成 CSR 并使用外部 CA 签署证书,然后导入。
我认为别名可以是您制作的任何东西,删除由其别名指定的证书会删除证书本身和相应的私钥?
可以在不影响关键信息的情况下随意更改别名吗?也可以使用不同的别名导入相同的证书并且仍然有效(即与私钥匹配)?
我问的原因是在导入证书时,我希望看到它列为 privatekeyentry 类型而不是它当前显示的受信任证书,不知道为什么。
我们之前添加并显示正常的根证书和内部证书。
更新:
感谢您的答复。因此,为了澄清我的理解并确保我做对了,重命名私钥条目的别名是有效的,因为证书和密钥在这个别名下保存在一起。删除私钥条目类型的别名也是如此,这将删除证书和密钥。
那么回到我最初的问题之一,证书是否可以以不同的别名再次导入,并且仍然与存储中持有的私钥匹配?根据信息 ID 说不,它需要使用之前为私钥设置的别名。
我认为混淆和复杂性在于私钥永远不会离开密钥库,它是在创建 CSR 时生成的,因此永远不会与证书同时导入。
我的问题是导入的证书显示为受信任的证书条目,所以我猜它与商店中的私钥不匹配。
执行 CSR 生成时是否指定了私钥的别名?如果是这种情况,是否有可能以不同的别名导入签名证书会导致两者不匹配?我唯一能想到的就是使用了错误的 CSR。
查看不同密钥库条目类型的源代码,一切都很清楚。密钥库支持三种类型:
让我们详细介绍一下:
KeyStore.PrivateKeyEntry类型具有三个字段:
private final PrivateKey privKey;
private final Certificate[] chain;
private final Set<Attribute> attributes;
Run Code Online (Sandbox Code Playgroud)
不同的是,类型KeyStore.TrustedCertificateEntry只有两个:
private final Certificate cert;
private final Set<Attribute> attributes;
Run Code Online (Sandbox Code Playgroud)
如果您枚举条目,您只会获得一个证书+密钥的条目。因此,这似乎存储在 PrivateKeyEntry 中。它结合了证书和密钥并将其链接到一个别名。重命名别名将影响密钥和证书。
由于密钥库中的每个条目完全独立于其他条目,因此只要每个条目都有自己唯一的别名,您就可以导入相同的密钥和证书数十次。
顺便说一句:我记得密钥库甚至允许具有相同别名的多个条目(不知道这是否适用于所有密钥库格式)。在这种情况下,您只能通过别名访问第一个条目。仅当您枚举所有条目时才能访问另一个。