我正在尝试通过 HTTPS 访问服务,但由于网络设置限制,我试图通过 ssh 隧道发出请求。
我使用如下命令创建隧道:
ssh -L 9443:my-service.com:443 sdt-jump-server
该服务只能通过 HTTPS 使用,它使用自签名证书托管,并且它位于负载均衡器后面,该负载均衡器使用主机名或显式 Host 标头将传入请求路由到适当的后端服务。
我可以使用 curl 从我的本地系统调用端点
curl -k -H '主机:my-service.com' https://localhost:9443/path
但是,当我尝试使用 JAX-RS 的 CXF 3.1.4 实现来发出相同的请求时,我似乎无法使其工作。我配置了一个 hostnameVerifier 以允许连接,下载了服务器的证书,并将其添加到我的信任库中。现在我可以连接了,但负载均衡器似乎没有遵守我试图设置的 Host 标头。
我迷失了一会儿,直到我设置-Djavax.net.debug
并看到传递的 Host 标头实际上是localhost
我设置的值而不是我设置的值。如何让 CXF 尊重我设置的 Host 标头,而不是使用 WebTarget 的 URL 中的值?!