SSL客户端标识密钥库 - 通过FileInputStream按需解析标识

时间:2013-01-17 00:03:18

标签: java security ssl keystore

在按需处理多组身份时,我正在寻找客户端身份存储中不太常见的SSL使用的最佳做法。

让我说清楚,这个问题是关于密钥库(Java)的客户端处理。

由于这是我第一次使用SSL,我的研究工作引导我更多地遵循常见的最佳实践,例如:

  • 为您的信任提供单独的密钥库。 (例如truststore.jks
  • 您身份的单独密钥库。 (例如keystore.jks - 私钥)

这一部分非常清楚,当我考虑浏览器证书如何工作,我接受服务器的证书,同时服务器识别我的证书(身份),甚至在更酷的Firefox中,这是完全有意义的,因为它允许我选择要出示的证书。

通过代码,我依赖Keystore.load(FileInputStream)的使用,因此在构建SSLSocketFactory(apache)之前,我实际上选择了要使用的信任和密钥存储区。

所有一切都很好,但这是复杂的,从业务角度来说,我的webapp在任何给定时间都支持N-Identities。这些身份甚至可以在单个会话中切换。我在这里指定身份,因为这些身份可能与托管网站有不同的 privateKey + 证书合同。不同之处在于它们的有效性(例如有效期至350天)会有所不同,而且 RDN (例如CN=Foo, OU=Foo等)肯定会有所不同。

所以我的第一次尝试是创建一个巨型密钥库并导入所有内容 - 前提是它们具有唯一的别名。一开始就没问题,但是对于每个有新合同的新主机,不得不重新加载不同的密钥,现在我正在进入别名映射问题。

所以这是另一种选择,我正在考虑为每个身份创建单独的文件存储路径。所以基本上IdentityA转到D:\security\<b>A</b>\keystore.jksB转到了等等。 AB的其他私钥可以加载到各自的密钥库中。当然,信任库对于所有身份都是相同的,但是他们的密钥库将在需要时进行查找和加载。

我不是百分之百确定我所采取的方向是否是处理这些方案的最佳方式,但我想从其他很可能已经遇到类似事情的人那里得到一些意见。

0 个答案:

没有答案