使用p12密钥Android Apache的SSL连接自签名证书

时间:2014-04-11 08:06:54

标签: java android ssl

我遇到了在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键的任何痕迹。请帮助,我尝试了很多解决方案,但没有任何结果。

0 个答案:

没有答案