Java 尽管设置了keystore和truststore,但无法访问握手失败警报的ewsdlexception
我正在开发一个Springboot应用程序,它将与具有SOAP Web服务的服务器通信。相互身份验证或双向SSL身份验证用于通信。我已参考了所提出的建议,并确定了以下内容: 在应用程序属性中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
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”)代码>?