Связь клиент-сервер через https с использованием XML в Android - PullRequest
0 голосов
/ 28 декабря 2010

Это первый раз, когда я пытаюсь это сделать. Может кто-нибудь PLS поделиться немного кода, который поможет мне сделать это.

Любая помощь будет оценена.

Начальная попытка

привет

Я пытаюсь написать код, который будет выполнять клиент-серверную связь через https.

Фрагмент кода (в основном с разных форумов) для того, что я сделал, выглядит так:

_FakeX509TrustManager.allowAllSSL ();

Код для allowAllSSL () -

открытый статический void allowAllSSL () {HttpsURLConnection.setDefaultHostnameVerifier (new HostnameVerifier () {

            public boolean verify(String hostname, SSLSession session) {
                // TODO Auto-generated method stub
                return false;
            }

    });

    SSLContext context = null;
    if (trustManagers == null) {
            trustManagers = new TrustManager[] { new _FakeX509TrustManager() };
    }

    try {
            context = SSLContext.getInstance("TLS");
            context.init(null, trustManagers, new SecureRandom());
    } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
    } catch (KeyManagementException e) {
            e.printStackTrace();
    }

    HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

}

Также в основной деятельности код после вышесказанного:

HttpPost post = new HttpPost (новый URI (eText.getText (). ToString ())); post.setEntity (new StringEntity ("test"));

            KeyStore trustStore = KeyStore.getInstance("JKS");
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            InputStream trustStoreStream = getBaseContext().getResources().openRawResource(R.raw.mytruststore);
            trustStore.load(trustStoreStream, "test1234".toCharArray());
            trustManagerFactory.init(trustStore);

            // Setup keystore
            KeyStore keyStore = KeyStore.getInstance("JKS");
            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            InputStream keyStoreStream = getBaseContext().getResources().openRawResource(R.raw.mykeystore);
            keyStore.load(keyStoreStream, "test1234".toCharArray());
            keyManagerFactory.init(keyStore, "test1234".toCharArray());

            SSLSocketFactory sslf = new SSLSocketFactory(keyStore);
            sslf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            SchemeRegistry schemeRegistry = new SchemeRegistry();
            schemeRegistry.register(new Scheme ("https", sslf, 443));
            SingleClientConnManager cm = new
            SingleClientConnManager(post.getParams(), schemeRegistry);

            HttpClient client = new DefaultHttpClient(cm, post.getParams());
            HttpResponse result = client.execute(post); 

Я сгенерировал файлы JKS Keystore и Truststore и сохранил их в папке / res / raw в моем приложении.

Ошибка, которую я получаю здесь:

W / System.err (358): java.security.KeyStoreException: реализация JS KeyStore не найдена W / System.err (358): в java.security.KeyStore.getInstance (KeyStore.java:134) W / System .err (358): на com.msi.getwebpage.GetWebPage $ 2.onClick (GetWebPage.java:93) W / System.err (358): на android.view.View.performClick (View.java:2408) W / System.err (358): на android.view.View $ PerformClick.run (View.java:8816) W / System.err (358): на android.os.Handler.handleCallback (Handler.java:587) W / System.err (358): на android.os.Handler.dispatchMessage (Handler.java:92) W / System.err (358): на android.os.Looper.loop (Looper.java:123) W / System. ошибка (358): в android.app.ActivityThread.main (ActivityThread.java:4627) W / System.err (358): в java.lang.reflect.Method.invokeNative (собственный метод) W / System.err (358 ): в java.lang.reflect.Method.invoke (Method.java:521) W / System.err (358): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) W /System.err (358): на com.android.internal.os.ZygoteI nit.main (ZygoteInit.java:626) W / System.err (358): at dalvik.system.NativeStart.main (собственный метод)

Есть идеи, почему я получаю эту ошибку?

Также, если я пытаюсь изменить экземпляр KeyStore на BKS, я получаю сообщение об ошибке:

W / System.err (387): java.io.IOException: Неправильная версия хранилища ключей. W / System.err (387): в org.bouncycastle.jce.provider.JDKKeyStore.engineLoad (JDKKeyStore.java:839) W / System.err (387): в java.security.KeyStore.load (KeyStore.java: 676) W / System.err (387): на com.msi.getwebpage.GetWebPage $ 2.onClick (GetWebPage.java:96) W / System.err (387): на android.view.View.performClick (View.java : 2408) W / System.err (387): на android.view.View $ PerformClick.run (View.java:8816) W / System.err (387): на android.os.Handler.handleCallback (Handler.java : 587) W / System.err (387): на android.os.Handler.dispatchMessage (Handler.java:92) W / System.err (387): на android.os.Looper.loop (Looper.java:123 ) W / System.err (387): в android.app.ActivityThread.main (ActivityThread.java:4627) W / System.err (387): в java.lang.reflect.Method.invokeNative (собственный метод) W / System.err (387): в java.lang.reflect.Method.invoke (Method.java:521) W / System.err (387): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. Java: 868) W / System.err (387): на com.android.internal.os.ZygoteInit.ma в (ZygoteInit.java:626) W / System.err (387): в dalvik.system.NativeStart.main (собственный метод)

Вероятно, это связано с тем, что я сохранил файлы jks keystore и truststore в папке / res / raw в моем приложении (только предположение).

Пожалуйста, дайте мне знать, как создать файл хранилища ключей BKS и хранилища доверенных сертификатов.

Или это любой другой способ, которым я могу попытаться заставить этот фрагмент кода работать. Спасибо !!

1 Ответ

0 голосов
/ 19 января 2011

Краткий ответ: используйте keytool (из Java SDK) для экспорта сертификатов из хранилища ключей jks, а затем импортируйте их в новое хранилище ключей BKS с помощью провайдера безопасности bouncycastle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...