因此,如果我有一个公共证书,坐在密钥库中将使用密钥工具删除它也删除私钥信息?
生成CSR并使用外部CA签署证书然后导入。
我认为Alias可以是你做的任何东西,删除别名指定的证书会删除证书本身和相应的私钥吗?
在不影响关键信息的情况下,是否可以更改别名?也可以在不同的别名下导入相同的证书并且仍然可以工作(即与私钥匹配)?
我问的原因是在导入证书时我希望看到它列为privatekeyentry类型而不是trustcertentry,它当前显示为,不知道为什么。
证书是我们之前添加的root和inter,显示确定。
更新
感谢您的回复。因此,为了澄清我的理解并确保我做对了,重命名私钥条目的别名是有效的,因为证书和密钥在这一个Alias下保持在一起。删除私钥条目类型的别名也是如此,该类型将删除证书和密钥。
回到我原来的一个问题,证书是否可以在不同的别名下再次导入,并且仍然与商店中的私钥相匹配?根据信息ID说不,它需要使用先前为私钥设置的别名。
我认为混淆和复杂性在于私钥从未离开密钥存储区,它是在创建CSR时生成的,因此永远不会与证书同时导入。
我的问题是导入的证书显示为trustedcert条目,因此我猜测它与商店中的私钥不匹配。
执行CSR生成时指定的私钥是否为别名?如果是这样的话,是否可能在不同的别名下导入签名证书会导致两者不匹配?我能想到的另一件事就是使用了错误的CSR。
答案 0 :(得分:1)
作为不同密钥库条目类型的源代码,一切都很清楚。 Keystore支持三种类型:
让我们详细说明:
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中。作为组合证书和密钥并将其链接到一个别名,重命名别名将影响密钥和证书。
由于密钥库中的每个条目完全独立于其他条目,因此只要每个条目具有自己的唯一别名,就可以导入相同的密钥和证书数十次。
顺便说一句:我记得密钥库甚至允许有多个相同别名的条目(不知道所有密钥库格式是否都是这样)。在这种情况下,您只能通过它的别名访问第一个条目。只有在列举所有条目时才能访问另一个。
答案 1 :(得分:1)
我认为别名可以是你做的任何事情,删除别名指定的证书会删除证书本身和相应的私钥吗?
是的,PrivateKeyEntry始终包含私钥和匹配的证书。也可以选择发行人证书。
在不影响关键信息的情况下,是否可以更改别名?
实际上,KeyStore API不包含重命名操作。但是可以使用新别名克隆条目并删除旧条目。这就是keytool的“-changelias
”命令的实现方式。
同样的证书也可以在不同的别名下导入并且仍然可以工作(即与私钥匹配)?
没有。如果导入的证书的别名不属于PrivateKeyEntry,则会创建TrustedCertificate条目。
回到我原来的一个问题,证书是否可以在不同的别名下再次导入,并且仍然与商店中的私钥相匹配?根据信息ID说不,它需要使用先前为私钥设置的别名。
完全。
我认为混淆和复杂性在于私钥从未离开密钥存储区,它是在创建CSR时生成的,因此永远不会与证书同时导入。
不,私钥是使用“-genkeypair
”命令(与自签名证书一起)生成的,CSR是使用“-certreq
”命令生成的。这两个命令都需要别名参数。
执行CSR生成时指定的私钥是否为别名?
是的,请参阅keytool reference。
如果是这种情况,是否可能在不同的别名下导入签名证书会导致两者不匹配?
完全。