调用https接口时出现该异常,
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
原因是可以看上图,因为本地没有目标服务器证书导致。解决此方法的两种方案,1.在运行java环境安装对方服务器证书,可使用keytool -printcert -rfc -sslserver ip:port 后保存为cer格式。2.在http建立连接时跳过证书验证
- CloseableHttpClient httpClient = getScontractHttpClient();
-
- public static CloseableHttpClient getScontractHttpClient() {
- SSLContext sslContext = null;
- try {
- sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
- @Override
- public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
- return true;
- }
- }).build();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (KeyManagementException e) {
- e.printStackTrace();
- } catch (KeyStoreException e) {
- e.printStackTrace();
- }
- //创建httpClient
- return HttpClients.custom().setSSLContext(sslContext).
- setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
-
- }