我必须使用我的Java Web应用程序(在Tomcat上运行)来使用Axis中完成的web服务。做web服务的公司使用HTTPS和自签名的测试证书。使用Java和Tomcat的webservice中的SSL握手问题
我已经运行Netbeans wizzard来生成基于WSDL的Web服务,并且这是正确的。如果我使用浏览器进入web服务的网站,由于SSL证书,我收到警告,我必须创建一个例外。
当试图运行我的代码时,SSL连接发生时会出现异常。唯一的例外是:
1.
com.sun.xml.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
一些时间(不改变代码)
2.
com.sun.xml.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我想,我一定要结合证书导入Java VM和/或Tomcat,并且还告诉忽略这不是可信的来源。
如何做到这一点?如何正确使用这个安全的web服务?
如果我提供的信息不够,请询问更多。
感谢
埃塞基耶尔
UPDATE:
我已经试过这两个东西,都没有成功,唯一的例外是相同的。
项1)
System.setProperty("javax.net.ssl.trustStore","/home/serverapp/BSS-cert.p12");
System.setProperty("javax.net.ssl.trustStorePassword","password");
System.setProperty("javax.net.ssl.trustStoreType","PKCS12");
选项2) 密钥库KS = KeyStore.getInstance( “PKCS12”); (新的FileInputStream(“/ home/serverapp/BSS-cert.p12”),“password”.toCharArray());
KeyStore jks = KeyStore.getInstance("JKS");
jks.load(null);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "f0p6k9n2".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(jks);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
而且,我认为可能是问题是Web服务,我想嘱咐HTTPS连接,并开扩的输入流时,它失败了同样的错误。
String httpsURL = "https://serverurl:443/theservice?wsdl";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
InputStream ins = con.getInputStream(); //Exception here!
InputStreamReader isr = new InputStreamReader(ins);
BufferedReader in = new BufferedReader(isr);
我会尝试这一点,并让你知道。我试图导出DER格式化的X509文件并将其导入“cacerts”,但它不起作用。 – Ezequiel 2011-02-16 07:06:23
我试过这两件事。 – Ezequiel 2011-02-16 08:12:58