alias
我听说过有关Java 密钥库文件中属性用途的相互矛盾的信息。有人可以澄清一下这个属性到底是什么,以及在为常规 Web 服务器链中的叶证书和中间证书创建新的 java 密钥库时应该设置什么?
我曾经认为这alias
只是 jks 文件中每个条目的唯一标识符,因此叶子将具有与中间证书不同的别名。现在,我不太确定。有人可以澄清吗?
alias
我听说过有关Java 密钥库文件中属性用途的相互矛盾的信息。有人可以澄清一下这个属性到底是什么,以及在为常规 Web 服务器链中的叶证书和中间证书创建新的 java 密钥库时应该设置什么?
我曾经认为这alias
只是 jks 文件中每个条目的唯一标识符,因此叶子将具有与中间证书不同的别名。现在,我不太确定。有人可以澄清吗?
别名
要回答您的直接问题,别名字段应该是一个唯一的字符串,用于标识密钥条目。这适用于所有类型,例如受信任的和中间的。
文档
密钥库别名
所有密钥库条目(密钥和可信证书条目)都通过唯一别名访问。
当您使用 -genseckey 命令生成密钥、使用 -genkeypair 命令生成密钥对(公钥和私钥)或使用 -importcert 命令将证书或证书链添加到受信任的证书列表。后续的 keytool 命令必须使用相同的别名来引用实体。
例如,假设您使用别名 duke 生成新的公钥/私钥对,并通过以下命令将公钥包装到自签名证书中(请参阅证书链):
keytool -genkeypair -alias duke -keypass dukekeypasswd
这指定了后续命令访问与别名 duke 关联的私钥所需的初始密码“dukekeypasswd”。如果您以后想更改 duke 的私钥密码,请使用如下命令:
`keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass`
这会将密码从“dukekeypasswd”更改为“newpass”。
请注意:密码实际上不应在命令行或脚本中指定,除非用于测试目的,或者您在安全系统上。如果您未在命令行上指定所需的密码选项,系统将提示您输入
标准和实践
我不认为有任何固定的命名标准,我相信你可以与 10 个不同的人交谈并得到 10 个不同的答案。您只希望它独特且合乎逻辑。
API 和 Oracle 的 Keytool 在检查重复项方面做得不是很好,考虑到它用于识别密钥存储中的每个条目,我认为这是一个特别的疏忽。
解决重复的最佳方法是生成一个新的密钥库,并将旧密钥库中的每个条目添加到具有唯一别名的新密钥库中。您可以遍历密钥库并使用其时间戳来识别存储中的不同证书。
我有完全相同的问题,你完美地表达了这个问题。我在实验后的理解(遗憾的是文档没有明确说明这一点)是:
别名不是单一对象标识符;您可以对密钥库中的密钥和证书条目使用相同的别名,而不会抹去另一个。
实际上,您必须对密钥及其关联的证书使用相同的别名,才能将它们联系在一起。链中的其他证书应具有不同的别名,并使用您选择的合理名称来识别它们。
我不是这方面的专家,所以请用正确的盐粒回答我的问题。
你的问题不是很清楚,但回答一种可能性:
抽象的KeyStore
API和具体的 JKS 格式有两种与 SSL/TLS 相关的条目:privateKey
服务器的条目包含私钥和证书链(叶和中间件,通常是根)都在一个别名下;trustedCert
条目(如果有)包含其他方的证书,通常是 CA,每个都使用不同的别名
以编程方式,privateKey 条目链中的不同证书通过keystore.getCertificateChain(alias)[0]
= 叶、[1]
= 第一个中间体等获得。
在密钥库/信任库中,您可以拥有更多密钥/证书,并且每个密钥都有一个别名。如果必须在服务器中配置 SSL,通常需要配置密钥库、密钥库密码、密钥密码和别名。基本上,您使用别名来引用您打算使用的密钥。
<security-realm name="SSLClientCertRealm">
<server-identities>
<ssl>
<keystore path="server-ssl.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore" alias="alias_name" key-password="keystore"/>
</ssl>
</server-identities>