【问题标题】:SSL: How to handle multiple clients with separate keys connecting to the same port?SSL:如何使用连接到同一端口的单独密钥处理多个客户端?
【发布时间】:2016-06-10 03:40:54
【问题描述】:

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

不起作用的事情:

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

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

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

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

【问题讨论】:

    标签: java ssl x509certificate certificate-store


    【解决方案1】:

    暂且不说使用不同的端口:

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

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

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

    一旦绑定套接字,就绝对无法编辑套接字的 SSL 上下文。对吗?

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

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

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

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

    在收到ClientHello 之前,不会调用chooseServerAlias

    【讨论】:

    • 我同意你关于使用 CA 的观点。我已经用另一个正在讨论的线程更新了这个问题。你也能回答这个问题吗?
    • 我会试试chooseServerAlias() 方法。我认为这应该可以解决我们的问题。对旧代理使用旧密钥,对新服务器使用新密钥。至少在我们建立 CA 架构之前。
    猜你喜欢
    • 2021-02-09
    • 2011-11-28
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2013-05-14
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多