3
你好我嘗試使用SSL Android和即時得到這個錯誤握手:信任錨使用SSL沒有找到
10-21 15:39:33.279: W/System.err(500): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-21 15:39:33.279: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:381)
10-21 15:39:33.279: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.<init>(OpenSSLSocketImpl.java:681)
10-21 15:39:33.279: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getOutputStream(OpenSSLSocketImpl.java:618)
10-21 15:39:33.279: W/System.err(500): at com.example.workoutlog.TestSSL.<init>(TestSSL.java:43)
10-21 15:39:33.279: W/System.err(500): at com.example.workoutlog.HomePage$GetHandShake.doInBackground(HomePage.java:1816)
10-21 15:39:33.279: W/System.err(500): at com.example.workoutlog.HomePage$GetHandShake.doInBackground(HomePage.java:1)
10-21 15:39:33.289: W/System.err(500): at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-21 15:39:33.289: W/System.err(500): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
10-21 15:39:33.289: W/System.err(500): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-21 15:39:33.289: W/System.err(500): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
10-21 15:39:33.289: W/System.err(500): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
10-21 15:39:33.289: W/System.err(500): at java.lang.Thread.run(Thread.java:856)
10-21 15:39:33.289: W/System.err(500): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-21 15:39:33.289: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:276)
10-21 15:39:33.289: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:197)
10-21 15:39:33.289: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:584)
10-21 15:39:33.299: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
10-21 15:39:33.299: W/System.err(500): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:378)
10-21 15:39:33.299: W/System.err(500): ... 11 more
10-21 15:39:33.299: W/System.err(500): Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-21 15:39:33.299: W/System.err(500): ... 16 more
10-21 15:39:33.299: W/dalvikvm(500): threadid=17: thread exiting with uncaught exception (group=0x40cf7930)
10-21 15:39:33.310: W/GAV2(500): Thread[AsyncTask #4,5,main]: dispatch call queued. Need to call GAServiceManager.getInstance().initialize().
這是我的代碼:
public class TestSSL {
SSLSocket sslsocket;
Context context;
public TestSSL(Context context)
{
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
try {
sslsocket = (SSLSocket) sslsocketfactory.createSocket("server", port);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
InputStream inputstream = null;
try {
inputstream = sslsocket.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
OutputStream outputstream = null;
try {
outputstream = sslsocket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
sslsocket.addHandshakeCompletedListener(new HandshakeCompletedListener() {
@Override
public void handshakeCompleted(HandshakeCompletedEvent event) {
// TODO Auto-generated method stub
Log.i("test", event.toString());
}
});
try {
sslsocket.startHandshake();
} catch (IOException e) {
e.printStackTrace();
}
}
}
爲什麼即時得到這個錯誤? 謝謝。