0

重複の可能性:
Java サーバーと Android クライアント間の SSL 接続エラー

あなたがSSLに精通しているなら!! 貴重な時間を割いて、Android と Java サーバー間の SSL 接続の設定でどこが間違っているのか教えていただけますか。この接続設定にうんざりしています。「間違ったバージョンのキーストア」になってしまうと、どこが間違っているのかわかりません。

私はSSLが得意ではありませんが、それでも最善を尽くしています。これは、ほとんどの人が直面している主要な問題の 1 つであり、これまでのところ解決されていません。ガイドしてくれる人はいますか?このリンクhttp://blog.callistaenterprise.se/2011/11/24/creating-self-signed-certificates-for-use-on-android/に従って、BKS 形式のトラストストアとキーストアを作成しました。

回答が得られないため、この質問を 3 回続けて提起します。そのため、ssl のコーダーとして自分自身を見つけたすべての人への挑戦として、この投稿を回しています。もしよろしければ、あなたの知識を共有してください。

アンドロイドコードは次のとおりです。

private SSLContext createSSLContext(final Context cont){
    SSLContext ssl_cont = null;
    try {
        Log.d(TAG, "TrustStore - Initializing");   
        KeyStore trustStore = KeyStore.getInstance("BKS");
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        InputStream trustStoreStream = cont.getResources().openRawResource(R.raw.clienttruststore);
        Log.d(TAG,"here...");
        trustStore.load(trustStoreStream, "client".toCharArray());
        trustManagerFactory.init(trustStore);
        Log.d(TAG, "TrustStore - Initialized");

        // Setup keystore
        Log.d(TAG, "KeyStore - Initializing");
        KeyStore keyStore = KeyStore.getInstance("BKS");
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        InputStream keyStoreStream = cont.getResources().openRawResource(R.raw.client);
        keyStore.load(keyStoreStream, "client".toCharArray());
        keyManagerFactory.init(keyStore, "client".toCharArray());
        Log.d(TAG, "KeyStore - Initialized");

        ssl_cont = SSLContext.getInstance("TLS");
        ssl_cont.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); 
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.d(TAG, "ERROR: " + e.getMessage());
    }
    return ssl_cont;
}

OnClickListener onConnClick = new OnClickListener() {

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        try {
            // Setup the SSL context to use the truststore and keystore
            Log.d(TAG, "Started..");
            SSLContext ssl_context = createSSLContext(cont);                
            SSLSocketFactory socketFactory = (SSLSocketFactory) ssl_context.getSocketFactory();
            socket = (SSLSocket) socketFactory.createSocket(ipadd.getText().toString().trim(), Integer.parseInt(port.getText().toString().trim()));
            dataOut = new DataOutputStream(socket.getOutputStream());
            dataIn = new DataInputStream(socket.getInputStream());
            msgin.setText("Connected");
            Log.d(TAG, "Completed..");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            msgin.setText("Not connected");
            Log.d(TAG, "ERROR: " + e.getMessage());
        }
    }
};

Java サーバー部分:

    SSLServerSocketFactory mySSLServerFac = null;
    SSLServerSocket mySSLServerSocket = null;
    SSLSocket mySSLSocket = null;
    String msg = null;
    System.out.print("I'm here\n");
    try {
        mySSLServerFac = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        mySSLServerSocket = (SSLServerSocket) mySSLServerFac.createServerSocket(9989);
        System.out.println("Listening on 9999\n");
        mySSLSocket = (SSLSocket) mySSLServerSocket.accept();

        DataInputStream input = new DataInputStream(mySSLSocket.getInputStream());
        DataOutputStream output = new DataOutputStream(mySSLSocket.getOutputStream());      
        do{
            System.out.println("Remote IP Address : " + mySSLSocket.getInetAddress());
            java.util.Scanner sc = new java.util.Scanner(System.in);
            output.writeUTF(sc.nextLine());
            msg = input.readUTF().toString();
            System.out.println(msg);
        }while(msg != "exit");
        System.out.println(msg);                
    } catch (Exception e) {
        e.printStackTrace();
    }

スタックトレース:

04-10 00:09:02.065: DEBUG/SSLActivity(276): Started..
04-10 00:09:02.065: DEBUG/SSLActivity(276): Trust store - Initializing
04-10 00:09:02.075: DEBUG/SSLActivity(276): here...
04-10 00:09:02.085: DEBUG/SSLActivity(276): ERROR: Wrong version of key store.
04-10 00:09:02.095: WARN/System.err(276): java.lang.NullPointerException
04-10 00:09:02.116: WARN/System.err(276):     at com.pkg.sslmsg.SSLMsgActivity$1.onClick(SSLMsgActivity.java:97)
04-10 00:09:02.116: WARN/System.err(276):     at android.view.View.performClick(View.java:2408)
04-10 00:09:02.125: WARN/System.err(276):     at android.view.View$PerformClick.run(View.java:8816)
04-10 00:09:02.135: WARN/System.err(276):     at android.os.Handler.handleCallback(Handler.java:587)
04-10 00:09:02.135: WARN/System.err(276):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 00:09:02.135: WARN/System.err(276):     at android.os.Looper.loop(Looper.java:123)
04-10 00:09:02.145: WARN/System.err(276):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-10 00:09:02.155: WARN/System.err(276):     at java.lang.reflect.Method.invokeNative(Native Method)
04-10 00:09:02.155: WARN/System.err(276):     at java.lang.reflect.Method.invoke(Method.java:521)
04-10 00:09:02.175: WARN/System.err(276):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-10 00:09:02.175: WARN/System.err(276):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-10 00:09:02.186: WARN/System.err(276):     at dalvik.system.NativeStart.main(Native Method)
04-10 00:09:02.196: DEBUG/SSLActivity(276): ERROR: null

これを要求と見なし、これから私を導いてください。私はいたるところで解決策を探してみましたが、ただの失望に終わります。誰かが私を案内してくれると助かります!

この最後の試みに多くの希望を持ち続けてください!これを知っている場合は、助けてください。ばかげていると感じるかもしれませんが。私はただの学習者です。

前もって感謝します。

4

0 に答える 0