具有多个SSL证书的Java服务器

具有多个SSL证书的Java服务器,java,security,ssl,certificate,ssl-certificate,Java,Security,Ssl,Certificate,Ssl Certificate,我有一个情况,不确定是否有可能的解决办法 我有一个带有SSL套接字和证书“a”和“B”的Java服务器。我还有两种类型的客户机——一种是证书“A”,另一种是证书“B”。但是,服务器端仅加载一个证书,因此,证书为“a”的客户端可以连接,或者只有证书为“B”的客户端可以连接 是否可以修改Java服务器,以便在任何客户端的连接上,它将确定使用哪个证书(a和B)并使用适当的证书 请原谅我的安全无知 谢谢。通过可以在同一IP地址和端口上使用两个服务器证书,这必须得到客户端和服务器的支持 Java在客户端支

我有一个情况,不确定是否有可能的解决办法

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

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

请原谅我的安全无知


谢谢。

通过可以在同一IP地址和端口上使用两个服务器证书,这必须得到客户端和服务器的支持

Java在客户端支持这一点

不幸的是,这在服务器端还不受支持。这是

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


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

您是说Sun/Oracle Glassfish Java服务器吗?它是一个带有SSL套接字的Java应用程序,充当服务器。为什么您的客户端也有证书a和B?您正在尝试使用客户端证书身份验证吗?我没有正确表达自己的意思。我有客户,他们中的一些人有证书A,而其他人有证书B。为什么他们会“有”证书A或B?你说客户有证书是什么意思?您的意思是某些客户端被配置为信任证书A和其他证书B,其中证书A和证书B都在服务器上(当然只有服务器有它们的私钥),还是您正在谈论用于验证客户端的其他证书?目前我们正在进行直接安全套接字连接。是否存在SNI代理类型a交易?我还假设这两个证书用于不同的主机名(否则SNI不会有帮助)。