【发布时间】:2021-06-08 15:56:17
【问题描述】:
我必须使用证书调用服务器 API,所以我已将 cer 文件导入密钥库并完成编码,但仍然出现错误 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
用于将 cer 文件导入密钥库的命令。 keytool -importcert -file D:\KALAIVANI_ALL\kalaivani\NEW_EMANDATE_APGB\servertoservecert\onmagcert.cer -keystore D:\KALAIVANI_ALL\kalaivani\NEW_EMANDATE_APGB\servertoservecert\server_npcikeystore.jks -alias "cedge1"
appPathCertificate="D:/KALAIVANI_ALL/kalaivani/NEW_EMANDATE_APGB/servertoservecert/server_npcikeystore.jks";
System.out.println("appPathCertificate--->"+appPathCertificate);
char[] passphrase = "cedge1".toCharArray(); //password
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream(appPathCertificate), passphrase); //path
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keystore);
SSLContext context = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers();
context.init(null, trustManagers, null);
SSLSocketFactory sf = context.getSocketFactory();
URL url = new URL(common_utility.getEmandateServerResponeURL());
System.setProperty("javax.net.ssl.keyStore", appPathCertificate);
System.setProperty("javax.net.ssl.keyStorePassword", "cedge1");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
String proxyhost=common_utility.getProxyHost();
String proxyport=common_utility.getProxyPort();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyhost, new Integer(proxyport)));
HttpsURLConnection conn = (HttpsURLConnection ) url.openConnection(proxy);
conn.setSSLSocketFactory(sf);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setUseCaches (false);
System.out.println("GETISSUE Request : "+str_jsonparams);
OutputStream os = conn.getOutputStream();
os.write(str_jsonparams.getBytes());
os.flush();
System.out.println("Response code :"+conn.getResponseCode());
【问题讨论】:
-
任何人都可以帮忙