我发布了一个Java桌面应用程序,该应用程序需要与Spring Boot webapp中的embedded式Tomcat提供的一些RESTful API进行通信。
我打算在桌面和服务器之间使用自签名证书进行通信。 但如果我后来想公开一些需要encryption的公共网页,我相信我将需要一个商业证书。
有没有可能在Tomcat中使用多个证书? 如果是这样,服务器如何区分哪些请求是由哪个证书encryption的?
该协议本身不允许您在同一IP上的同一端口上托pipe两个SSL证书。
从Tomcat SSLconfiguration如何 :
在安全连接上使用基于名称的虚拟主机可能会有问题。 这是SSL协议本身的devise限制。 客户端浏览器接受服务器证书的SSL握手必须在访问HTTP请求之前进行。 结果,包含虚拟主机名的请求信息在authentication之前不能被确定,因此不可能将多个证书分配给单个IP地址。
发送给Tomcat用户列表的电子邮件指出 ,您可以通过“您想要保护的每个IP(或IP /端口)的连接器和关联的密钥库”来执行此操作。
这将允许你在不同的端口(例如,公开的0.0.0.0:4443
和你的API的0.0.0.0:4443
)和/或地址(例如公开的192.0.2.2:443
和你的API的192.0.2.2:443
)服务。
在SSL握手之前(例如192.168.0.1/16
stream量获得一个证书,其他stream量获得另一个证书),在理论上有可能在每个接口或每个CIDR级别进行区分,但是我不知道任何单一的软件,这样做; 您需要通过防火墙使用端口转发。
使用简单端口转发来完成此操作:将端口443上的内部基础架构的连接转发到本地端口4443,并在Tomcat的端口4443上提供内部SSL证书。
注:我从来没有听说过这样做。