我正在使用 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 设置。