![我可以在 Tomcat 中对私有 API 使用自签名证书,对公共页面使用商业证书吗?](https://linux22.com/image/655049/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Tomcat%20%E4%B8%AD%E5%AF%B9%E7%A7%81%E6%9C%89%20API%20%E4%BD%BF%E7%94%A8%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%EF%BC%8C%E5%AF%B9%E5%85%AC%E5%85%B1%E9%A1%B5%E9%9D%A2%E4%BD%BF%E7%94%A8%E5%95%86%E4%B8%9A%E8%AF%81%E4%B9%A6%E5%90%97%EF%BC%9F.png)
我分发了一个 Java 桌面应用程序,该应用程序需要与 Spring Boot webapp 中嵌入式 Tomcat 提供的一些 RESTful API 进行通信。
我原本计划使用自签名证书来进行桌面和服务器之间的通信。但如果我以后想公开一些需要加密的公共网页,我认为我需要一个商业证书。
Tomcat 中可以使用多个证书吗?如果可以,服务器如何区分哪些请求是由哪个证书加密的?
答案1
协议本身不允许您在同一 IP 上的同一端口上托管两个 SSL 证书。
在安全连接上使用基于名称的虚拟主机可能会出现问题。这是 SSL 协议本身的设计限制。SSL 握手(客户端浏览器接受服务器证书)必须在访问 HTTP 请求之前进行。因此,在身份验证之前无法确定包含虚拟主机名的请求信息,因此无法将多个证书分配给单个 IP 地址。
发送至 Tomcat 用户列表的电子邮件状态您可以使用“您想要保护的每个 IP(或 IP /端口)的连接器和相关密钥库”来执行此操作。
这将允许您在单独的端口(例如0.0.0.0:443
公开和0.0.0.0:4443
您的 API)和/或地址(例如192.0.2.1:443
公开和192.0.2.2:443
您的 API)上提供服务。
理论上,可以在每个接口或每个跨域路由级别(例如来自的流量192.168.0.1/16
获得一个证书,其他流量获得另一个证书),但我不知道有哪个软件可以做到这一点;您需要通过防火墙使用端口转发。
通过简单的端口转发来实现此目的:将端口 443 上的内部基础设施的连接转发到本地端口 4443,并在 Tomcat 中的端口 4443 上提供内部 SSL 证书。
注:我从未听说过有这样的事。