2

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

但是,每次尝试连接到 Web 服务时,我都会收到sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径。如果我将默认 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 设置。

4

0 回答 0