我遇到了在android和apache服务器之间建立ssl连接的问题。我在PKCS12中有自签名证书。我尝试做以下事情:
KeyStore keyStore = KeyStore.getInstance(“PKCS12”); keyStore.load(certificateStream,password);
TrustManagerFactory tmf1 = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf1.init(keyStore);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, password);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf1.getTrustManagers(), null);
// Tell the URLConnection to use a SocketFactory from our SSLContext
URL url =new URL("https://172.20.175.1/kani/");
HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection();
urlConnection.setSSLSocketFactory(sslContext.getSocketFactory());
最后一行:
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
我得到以下例外:
04-11 11:35:30.123: W/System.err(4880): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
04-11 11:35:30.133: W/System.err(4880): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:401)
04-11 11:35:30.133: W/System.err(4880): at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:209)
04-11 11:35:30.133: W/System.err(4880): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478)
04-11 11:35:30.133: W/System.err(4880): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
etc...
问题是我的p12键没有初始化sslContext变量。我在调试模式下看了这个变量,但没有发现我的p12键的任何痕迹。请帮助,我尝试了很多解决方案,但没有任何结果。