【发布时间】:2011-09-16 06:40:07
【问题描述】:
我们可以在密钥库中加载多个证书和密钥吗?
是否总是只需要加载 Pairs(即证书和密钥一起)?
如果一个 Key Store 有多个证书和密钥,当 Java SSL 尝试作为服务器建立连接时会选择哪一个?
【问题讨论】:
标签: java ssl certificate keystore
我们可以在密钥库中加载多个证书和密钥吗?
是否总是只需要加载 Pairs(即证书和密钥一起)?
如果一个 Key Store 有多个证书和密钥,当 Java SSL 尝试作为服务器建立连接时会选择哪一个?
【问题讨论】:
标签: java ssl certificate keystore
虽然这取决于 KeyStore 类型,但通常您可以在一个存储中存储多个私钥和证书。
用于基于 Java 的服务器的密钥和证书组合将取决于应用程序的实现方式。许多应用程序允许您使用 别名 名称选择给定的证书。 KeyStore 中的密钥和证书获取器采用 alias 参数来进行此选择。通常,当配置中没有指定时,应用程序或框架将使用它根据KeyStore.aliases() 枚举找到的第一个合适的。
例如,Tomcat 在其Connector configuration 中使用keyAlias 属性:
keyAlias:用于服务器的别名 密钥库中的证书。如果不 指定读取的第一个键 将使用密钥库。
关于密钥对,一些 KeyStore(同样取决于类型)可用于存储 SecretKeys(例如 DES),即共享密钥以及公私密钥对。
【讨论】:
KeyManager 并从中初始化和 SSLContext (然后使用该上下文来构建你的套接字工厂)。这是KeyManager to specify an alias 的示例。
您可以拥有一个包含任意数量的证书和密钥的密钥库。
如果客户端用作其信任库的密钥库中有多个证书,则会查看所有证书,直到找到适合的证书。您可以查看预安装的证书,它们位于 /lib/security/cacerts 中。这只是根 CA 证书的大集合。
关于我不知道的键。我认为客户端使用由与服务器提供的证书相同的 CA 签名的密钥,如果有多个,则使用第一个。但我不能肯定地说。
【讨论】: