web-services - JAX-WS Web 服务,使用 HTTPS 端点 URL 而不是 HTTP 的负载平衡器

标签 web-services jakarta-ee tomcat jax-ws load-balancing

我们公开了部署在负载均衡器后面的 Tomcat 实例上的 Web 服务。 负载均衡器只允许 HTTPS 流量,但 Jax-ws 端点指向 HTTP WSDL url 而不是 HTTPS。当客户端访问 Loadbalancer HTTPS URL 时,它会被重定向到 HTTP,并且由于 HTTP 流量在 LB 上被阻止,客户端会收到错误消息,因为 WSDL 不可访问。

sun-jaxws.xml 或 webservice 注释中是否有任何配置指定告诉 JAX-WS 公开 HTTPS url 而不是 HTTP。

下面是我的配置:

sun-jaxws.xml:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime'
version='2.0'>
<endpoint
    name='/TestService'
    implementation='com.test.service.TestServiceImpl'
    url-pattern='/TestService' />    

Annotation Config On WebService Impl class:

@WebService(serviceName="TestServiceImpl",
portName="TestService",
endpointInterface = "com.test.service.TestService",
targetNamespace="http://test.com"
)
@HandlerChain(file = "handlers.xml")
@MTOM
@XmlAccessorType(XmlAccessType.PROPERTY)
public class TestServiceImpl implements TestService{
//Implementation
}

WebService End-Point, Please see the HTTPS protocol in Browser and HTTP in the WSDL location URL, I have removed the Service and url's due to security reasons

如果有人能指出正确的方向,那就太好了。

不同场景下的解决方案也请阅读评论

最佳答案

我不建议这种方法——更好的选择是终止负载均衡器上的 SSL 通信,并在负载均衡器和您的服务器之间使用纯 HTTP(除非您还需要保护均衡器和服务器之间的流量,但是我对此表示怀疑)。也就是说,您不必在两个地方设置 SSL,也不必在某些东西无法正常工作时感到双重头痛。因此,首先尝试以这种方式配置负载均衡器。此外,您必须手动重写 <soap:address location="..">在 WSDL 中标记(当然要添加 HTTPS 地址)并从本地存储的 WSDL 生成 WS 客户端。

如果您仍想在 Tomcat 上设置 SSL,那么您首先必须设置 keystore - 您的 key 和证书的“数据库”。网上有很多教程,一个是here .然后,您需要通过添加以下片段来更改 Tomcat 的 server.xml 文件:

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           keystoreFile="<PATH-TO-KEYSTORE>" keystorePass="<YOUR-KEYSTORE-PASSWORD>"
           clientAuth="false" sslProtocol="TLS"/>

最后,您需要指定您的 Web 服务将所有 HTTP 请求重定向到 HTTPS 监听器 - 但在 web.xml 文件中,而不是在 sun-jaxws.xml 中:

<user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

重启 Tomcat 即可。

关于web-services - JAX-WS Web 服务,使用 HTTPS 端点 URL 而不是 HTTP 的负载平衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591696/

相关文章:

java - java类中java服务器上的根路径?

tomcat - 在 Tomcat 集群环境中覆盖 Liferay 的 "autodeploy.enabled"属性

c# - 如何将 SoapHttpClientProtocol 转换为 HTTPS

.net - 安全地允许多个客户端共享单个资源

java - 关于TLS加密的查询

Java Web应用程序:how to get the original path of selected file?

spring - 如何在 Jelastic 上配置 Tomcat 9 Spring REST 应用 WAR?

tomcat - 如何在 Resteasy 服务中指定响应的自定义 HTTP 错误

ios - 没有apns可以使用聊天服务吗

python - 如何传递包含 url 的内容? ,/, & 里面的flask webservice方法