Java JAX-WS SSL握手异常

Java JAX-WS SSL握手异常,java,web-services,ssl,glassfish,Java,Web Services,Ssl,Glassfish,我正在使用jax-ws客户端连接到一个安全的web服务。该网站使用自签名证书,我已将其导入自定义密钥库,并根据该网站上的许多文章创建了一个套接字工厂 但是,我一直在获取sun.security.provider.certpath.SunCertPathBuilderException:每次尝试连接到web服务时,都无法找到请求目标的有效证书路径。如果将默认SSL上下文设置为自定义上下文,则可以作为独立客户端执行,但在部署到Glassfish应用程序服务器后,会出现相同的错误 任何想法都将受到欢迎

我正在使用jax-ws客户端连接到一个安全的web服务。该网站使用自签名证书,我已将其导入自定义密钥库,并根据该网站上的许多文章创建了一个套接字工厂

但是,我一直在获取sun.security.provider.certpath.SunCertPathBuilderException:每次尝试连接到web服务时,都无法找到请求目标的有效证书路径。如果将默认SSL上下文设置为自定义上下文,则可以作为独立客户端执行,但在部署到Glassfish应用程序服务器后,会出现相同的错误

任何想法都将受到欢迎。下面是创建SSL上下文的代码摘录

        SSLContext ctx = SSLContext.getInstance("SSLv3");
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(Client.class.getResourceAsStream("hfcerts"), "changeit".toCharArray() );
        kmf.init(ks, "changeit".toCharArray());

        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        TrustManager[] trustManagers = tmf.getTrustManagers();
        ctx.init(kmf.getKeyManagers(), trustManagers, new SecureRandom());

        SSLContext.setDefault(ctx);

        ((BindingProvider) port).getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, ctx.getSocketFactory());


另外,我不希望我的设置影响应用服务器上的常规SSL设置。

您的代码看起来很好,因此我怀疑密钥库有问题。确保已加载证书(而不是私钥)。如果证书链有多个CA,您可能还希望包括这些CA。