SSL:如何处理具有连接到同一端口的单独密钥的多个客户端



另一个遗留支持问题
我们有一个服务器-多客户端网络,其中每个组件都有一个自签名证书,并添加到服务器/客户端的信任存储中。我们在这里没有使用证书颁发机构
现在我们的问题是,为了更好的安全性,我们需要升级所有证书。新客户端将带有较新的证书,甚至服务器也将具有新的证书
我们的问题是如何处理老客户。升级我们老客户的密钥库是最后的手段。

不起作用的东西:

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

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

FWIW:服务器使用Java,客户端使用C++

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

不考虑使用不同的端口:

  1. (1)将在服务器与客户端证书相关的情况下工作
  2. 在让旧客户端识别新服务器证书方面,除了升级客户端信任库之外,没有任何可以起作用

这就是为什么你应该使用CA,甚至是内部CA,以及为什么你绝对不应该再次犯同样的错误。如果客户端直接信任CA而不是自签名服务器证书,那么您现在就不会有这个问题,而且无论您升级证书多少次,在CA证书到期之前都不会有它,这将需要20年的时间。

在进行此操作时,请确保以更新客户端信任库的方式进行构建。

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

一旦初始化了SSLContext,就无法编辑它,这先于套接字的创建,更不用说绑定它们了。嗯,也许你可以重新加载KeyManagerTrustManager,而不告诉SSLContext,但我并不是说它会(或不会)工作。

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

是的,这就是KeyManager接口的用途,特别是chooseServerAlias()

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

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

相关内容

  • 没有找到相关文章

最新更新