我一直在使用 JAVA 开发 WS 客户端,但我遇到了 SSL 身份验证问题。WS 是在 WCF 上创建的,我无法访问服务器,它们通过 HTTPS 工作并使用需要首先安装在客户端上的客户端证书。服务器人员向我发送了我成功安装在操作系统上的 PFX 证书(我正在使用 OS X),然后我可以通过浏览器访问 WS(Safari 或 FF 都是我尝试过的,以前无法访问 WS )。我认为操作系统中的任何应用程序都会使用此证书,但是当我尝试我的 JAVA 应用程序时它不起作用;起初抛出以下错误:
“javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”
我通过将证书导出到 CER 文件并使用 keytool 命令行工具将证书添加到“cacerts”keyStore JAVA 使用来解决这个问题。但在此错误消失后,以下开始出现:“403,禁止”。这显然是因为它没有使用该站点的 SSL 客户端证书,但我无法找到将其发送给它的方法。任何帮助,将不胜感激。
以下是我用来发布到 WS 的代码:
URL url = new URL(p_url);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", contentType);
OutputStream out = conn.getOutputStream(); // on this line it shows the error