0

我有一种情况,不确定是否有可能的解决方案。

我有一个带有 SSL 套接字和证书“A”和“B”的 Java 服务器。我也有两种类型的客户——一种带有证书“A”,另一种带有证书“B”。但是,服务器端只加载了一个证书,因此每个客户端都带有证书。“A”可以连接或仅连接具有证书的客户端。“B”可以连接。

是否可以修改 Java 服务器,以便在来自任何客户端的连接上,它将确定使用哪个证书( A 与 B )并使用适当的证书?

PS:请原谅我的安全无知。

谢谢你。

4

1 回答 1

1

通过服务器名称指示 (SNI) 扩展可以在相同的 IP 地址和端口上使用两个服务器证书,客户端和服务器必须支持该扩展。

自 Java 7 起,Java在客户端就支持这一点。

不幸的是,服务器端尚不支持此功能。这是为 Java 8 计划的

同时,如果您的服务器确实需要 SNI 支持,您可以使用另一台服务器来处理 SSL/TLS 连接并将纯文本连接转发到您的应用程序。通常,这可以通过用于 HTTP(S) 的 Apache Httpd(带有反向代理)来完成。

或者,看起来HTTPS-SNI-Proxy 项目对于其他协议可能更灵活(尽管其名称中有 HTTPS)。我没有尝试过,但根据它的 README,它会在初始 Client Hello 中查找 SNI 扩展,然后根据配置将整个 SSL/TLS 连接(不对其进行解密)转发到另一台服务器。SSLServerSocket在您的示例中,您必须在不同的端口(不是您真正想要收听的端口)上设置两个s,并根据客户端使用其 SNI 扩展名请求的内容,将此工具的连接转发到任一端口。

于 2013-07-29T19:16:25.363 回答