SSL:如何使用连接到同一端口的单独密钥来处理多个客户端?

时间:2016-06-10 03:40:55

标签: java ssl x509certificate certificate-store

这里有另一个传统支持问题!
我们有一个服务器多客户端网络,其中每个组件都有一个自签名证书,并被添加到服务器/客户端的信任存储区。我们这里没有使用证书颁发机构 现在我们的问题是我们需要升级所有证书以获得更好的安全性。新客户将获得更新的证书,甚至服务器将获得新证书 我们的问题是如何处理老客户。升级旧客户的密钥库是最后的选择。

不起作用的事情:

  1. 在服务器信任库中添加新旧证书:即使客户端正在验证服务器,服务器证书也不会出现在客户端信任库中。

  2. 为新客户端使用新端口:我们考虑为新客户端使用新端口并为旧客户端继续使用旧端口,但问题是有多个应用程序面临此问题所以我们必须搜索用于其他产品未使用的多个新端口。

  3. FWIW:服务器是Java,客户端是C ++

    在EJP回答后编辑
    我可能在这里问一个非常愚蠢的问题,但只是想确定一下。绑定后,绝对无法编辑套接字的SSL上下文。正确吗?
    另外,我们可以选择在握手期间使用的服务器证书吗?我知道chooseClientAlias()chooseServerAlias()方法但在这里我们不知道在发送客户端Hello消息之前要使用哪个证书。

1 个答案:

答案 0 :(得分:2)

暂停使用不同的端口:

  1. (1)将在服务器关注客户端证书时起作用。
  2. 除了升级客户端信任库之外,没有什么可以帮助老客户识别新的服务器证书。
  3. 这就是为什么你应该使用CA,甚至是内部CA,以及为什么绝对不再次犯同样的错误。如果客户端直接信任CA而不是自签名服务器证书,那么您现在不会遇到此问题,并且您将来不会再使用它,无论您多次升级证书,直到CA证书过期,应该花20年时间。

    在您使用它时,请确保构建更新客户端信任库的方法。

      

    绑定后,绝对无法编辑套接字的SSL上下文。正确的吗?

    在{em>初始化之后无法编辑SSLContext,这在创建套接字之前,更不用说绑定它们了。嗯,也许你可以重新加载KeyManagerTrustManager而不是告诉SSLContext,但我不是说它会(或不会)工作。

      

    另外,我们可以选择在握手期间使用的服务器证书吗?

    是的,这就是KeyManager界面的用途,特别是chooseServerAlias()

      

    我知道chooseClientAlias()chooseServerAlias()方法但在这里我们不知道在发送客户端Hello消息之前要使用哪个证书。

    chooseServerAlias在收到ClientHello之前不会被调用。