0

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

不起作用的事情:

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

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

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

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

4

1 回答 1

2

撇开使用不同的端口:

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

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

当你在做的时候,确保你构建了一种更新客户端信任库的方法。

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

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

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

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

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

chooseServerAliasClientHello在收到之前不会调用。

于 2016-06-10T03:52:24.090 回答