现在客户已近给我jks证书了,并且有效,没过期,但是用下面的方法访问的时候,出现下面的异常,请问下大家有什么好的解决办法,小弟不胜感激!java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179)
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:186)
at sun.net.www.protocol.https.HttpsClient.createSocket(HttpsClient.java:360)
at sun.net.NetworkClient.doConnect(NetworkClient.java:145)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:271)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:328)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:793)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
at Interface.InterfacePost.connect(InterfacePost.java:32)
at Interface.TestPost.main(TestPost.java:20)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:325)
at javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:283)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.<init>(HttpsURLConnectionImpl.java:65)
at sun.net.www.protocol.https.Handler.openConnection(Handler.java:42)
at sun.net.www.protocol.https.Handler.openConnection(Handler.java:37)
at java.net.URL.openConnection(URL.java:945)
at Interface.InterfacePost.connect(InterfacePost.java:31)
... 1 more
以下是我的代码:public class TestPost {
public static void main(String[] args) {
try {
// 要提交到的地址
String url = "https://eairiis-stgdmz.paic.com.cn/invoke/wm.tn/receive?";
// 要提交的文件名,具体到路径
String filenameToSend = "VERIFY.xml";
// JKS证书路径
String keyStore = "stg.jks";
// JKS密码
String keyStorePassword = "622689";
// 私钥证书路径
String trustStore = "stg.pfx";
// 私钥证书密码
String trustStorePassword = "11111111";
InterfacePost ix = new InterfacePost(); ix.connect(url, filenameToSend, keyStore, keyStorePassword, trustStore, trustStorePassword); } catch (Exception e) {
e.printStackTrace();
}
}
}
       class InterfacePost { public InterfacePost() {
} public void connect(String url1, String filenameToSend, 
String keyStore, String keyStorePassword, 
String trustStore, String trustStorePassword) throws Exception {
URL url = new URL(url1); HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("URL Host: " + session.getPeerHost());
return true;
}
}; System.setProperty("javax.net.ssl.keyStore",keyStore);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
System.setProperty("javax.net.ssl.trustStore",trustStore);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("java.protocol.handler.pkgs","sun.net.www.protocol");
HttpsURLConnection.setDefaultHostnameVerifier(hv);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.connect(); //这句有问题
                   if (connection instanceof javax.net.ssl.HttpsURLConnection) {
System.out.println("connected");

} else {
System.out.println("diff instance ");
}
        
connection.setRequestProperty("Content-Type", "text/xml");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false); File f = new File(filenameToSend);
byte data[] = new byte[(int) f.length()];
FileInputStream fis = new FileInputStream(f);
fis.read(data);
fis.close();
        connection.getContent();
OutputStream out = connection.getOutputStream(); out.write(data);
String aLine = null;
InputStreamReader inReader = new InputStreamReader(connection.getInputStream(), "UTF-8");
BufferedReader aReader = new BufferedReader(inReader);
while ((aLine = aReader.readLine()) != null)
System.err.println(aLine);
aReader.close();
connection.disconnect();
}
}