1

我必须使用我的 Java Web 应用程序(在 Tomcat 上运行)使用在 Axis 中完成的 Web 服务。制作 Web 服务的公司使用 HTTPS 和自签名证书进行测试。

我已经运行了一个 Netbeans 向导来生成一个基于 WSDL 的 Web 服务,并且这样做是正确的。如果我使用浏览器进入 web 服务的网站,我会因为 SSL 证书而收到警告,我必须创建一个异常。

尝试运行我的代码时,在建立 SSL 连接时出现异常。例外情况是:

1.

com.sun.xml.ws.client.ClientTransportException:HTTP 传输错误:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

有时(不更改代码)

2.

com.sun.xml.ws.client.ClientTransportException:HTTP 传输错误:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到到请求目标的有效认证路径

我想我必须将证书合并到 Java VM 和/或 Tomcat 中,并且还告诉忽略它不是受信任的来源。

这个怎么做?如何正确使用这个安全的网络服务?

如果我提供的信息还不够,请询问更多。

谢谢

以西结

更新:

这两件事我都试过了,都没有成功,例外都是一样的。

选项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) KeyStore ks = KeyStore.getInstance("pkcs12"); ks.load(new 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);
4

4 回答 4

2

这里有两种常见的方法:
http
://ws.apache.org/xmlrpc/ssl.html WebLogic 有自己的东西:http:
//download.oracle.com/docs/cd/E12840_01/wls/docs103/security/SSL_client。 html#wp1029670

于 2011-03-21T15:48:18.533 回答
0

我认为您必须配置未签名的证书可以信任。也许会对你有所帮助。

于 2011-02-16T03:52:00.163 回答
0

可能缺少正确的 SSL 认证。阅读此博客条目: http: //blogs.oracle.com/andreas/entry/no_more_unable_to_find此处给出的程序曾经帮助过我一次。

于 2011-02-16T08:26:29.370 回答
0

为了信任证书,您必须告诉 java 您信任签署证书的证书颁发机构。对于自签名证书,即证书本身。您需要将 javax.net.ssl.trustStore 系统属性设置为包含您要连接到的服务器证书的 CA 的密钥库。

当您获取证书以解决不受信任的连接错误时,您可能能够从浏览器中获取证书。尝试找到以 PKCS12 格式导出证书的选项,保存该文件。运行代码时,将 javax.net.ssl.trustStore 属性设置为刚刚保存的文件,并将 javax.net.ssl.trustStoreType 设置为 PKCS12。

于 2011-02-16T04:06:27.280 回答