Java 尽管设置了keystore和truststore,但无法访问握手失败警报的ewsdlexception

Java 尽管设置了keystore和truststore,但无法访问握手失败警报的ewsdlexception,java,web-services,ssl,soap,Java,Web Services,Ssl,Soap,我正在开发一个Springboot应用程序,它将与具有SOAP Web服务的服务器通信。相互身份验证或双向SSL身份验证用于通信。我已参考了所提出的建议,并确定了以下内容: 在应用程序属性中 server.ssl.key-alias=testclient server.ssl.key-password=password server.ssl.key-store=classpath:testclientselfsigned server.ssl.key-store-password=passwor

我正在开发一个Springboot应用程序,它将与具有SOAP Web服务的服务器通信。相互身份验证或双向SSL身份验证用于通信。我已参考了所提出的建议,并确定了以下内容:

在应用程序属性中

server.ssl.key-alias=testclient
server.ssl.key-password=password
server.ssl.key-store=classpath:testclientselfsigned
server.ssl.key-store-password=password
server.ssl.key-store-type=JKS
server.ssl.trust-store=classpath:myTruststore
server.ssl.trust-store-type=JKS
server.ssl.trust-store-password=password
在调用web服务的my代码中

    static {

            URL urlTruststore = ClassLoader.getSystemResource("myTruststore");
            URL urlKeystore = ClassLoader.getSystemResource("testclientselfsigned");
            if (urlTruststore != null) {
                logger.info("URL TRUST STORE:\t" + urlTruststore.getFile());
                System.setProperty("javax.net.ssl.trustStore", urlTruststore.getFile());
                System.setProperty("javax.net.ssl.trustStorePassword","password");
            }

            if (urlKeystore != null) {
                logger.info("URL KEY STORE:\t" + urlKeystore.getFile());
                System.setProperty("javax.net.ssl.keyStore",urlKeystore.getFile());
                System.setProperty("javax.net.ssl.keyStorePassword","password");
            }

String WS_URL = "https://uatexample.testserv.com/uat/ssl/custService";
                URL url = new URL(WS_URL);
                QName qname = new QName("http://www.sampleserv.com/services", "custService");
                Service service = Service.create(url, qname);
                CustService client = service.getPort(CustService.class);
就在这里
CustService client=service.getPort(CustService.class)我得到以下异常

com.sun.xml.internal.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException.

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
请注意,myTruststore.jks包含服务器**发送给我的证书,testclientselfsigned.jks包含客户端证书


我已经尝试了我在这里找到的所有建议,在我的代码中添加一个密钥库和信任库,但没有任何效果。但是,我在Soap UI中也尝试过同样的方法,效果很好。

您可以在ssllabs.com中看到许多有用的信息,它显示了服务器密码和支持的协议,还验证了证书链和名称。如果您的案例服务器配置错误,并且具有用于
cc.sedoparking.com
的证书,而不是
uatexample.testserv.com
如果您要连接到此服务器,则应禁用证书名称验证。是否可以添加调试选项(-Djavax.net.debug=ssl,handshake)按照您发送并发布输出的链接上的建议?您可以使用-Djavax.net.debug=all-too@Carlos,您能告诉我在哪里添加调试选项吗?我对这个很陌生,不知道在哪里插上。它在我的代码中吗?@Auro您可以在应用程序启动时将其作为参数传递,如果未设置它,您是否尝试过
System.setProperty(“javax.net.debug”,“all”);
?您可以在ssllabs.com中看到许多有用的信息。它显示服务器密码和支持的协议,还验证证书链和名称。如果您的案例服务器配置错误,并且有
cc.sedoparking.com
的证书,而不是
uatexample.testserv.com
您应该禁用证书名称验证如果要连接到此服务器,是否可以添加调试选项(-Djavax.net.debug=ssl,握手)按照您发送并发布输出的链接上的建议?您可以使用-Djavax.net.debug=all-too@Carlos您能告诉我在哪里添加调试选项吗?我对这个很陌生,不知道在哪里插入它。它在我的代码中吗?@Auro您可以在应用程序启动时将它作为参数传递,或者如果没有设置它,您是否尝试过
System.setProperty(“javax.net.debug”、“all”)