【发布时间】:2015-04-06 08:20:20
【问题描述】:
服务器端:
- 我在已启用 HTTPS 协议的 Tomcat 上部署了安全的 RESTful 服务。
我使用
keytool.创建了一个 Keystore serverkeystore 文件从 serverkeystore 导出 servercertificate.cer。
客户端:
创建了客户端密钥库 clientkeystore.jsk
在clientkeystore.jsk中导入servercertificate.cer
从 clientkeystore.jsk 导出了 clientcertificate.cer。
在JAVA_HOME/lib/security下导入clientcertificate.cer
客户端代码中的异常:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 30 more
代码:
private SSLConnectionSocketFactory buildSSLSocketFactory() throws Exception, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File("path to clientkeystore.jks"));
try {
trustStore.load(instream, "phhclient".toCharArray());
} finally {
instream.close();
}
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(trustStore, new TrustSelfSignedStrategy())
.build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1" },
null,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return sslsf;
}
无法找到请求目标的有效认证路径 请让我知道为什么我会收到异常
感谢和问候,
拉胡尔·贾恩
【问题讨论】:
标签: java apache https apache-httpclient-4.x