2013-04-11 75 views
3

我是Android的相對新手,並且遇到了一個簡單的SSL連接工作到java服務器的問題。Android to JAVA SSL

我知道java服務器正常工作,因爲我使用與服務器和java客戶端相同的密鑰庫對其進行了測試。

Android客戶端確實發送了一些內容,因爲java服務器接受連接併爲readline變量顯示空值,並且沒有錯誤消息。

我有我的密鑰倉庫和bks格式的信任庫,並添加到res/raw文件夾中。

Android客戶端:

SSLContext sslContext = SSLContext.getDefault(); 

    KeyStore trustSt = KeyStore.getInstance("BKS"); 
    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
    InputStream trustStoreStream = this.getResources().openRawResource(R.raw.truststore); 
    trustSt.load(trustStoreStream, "password".toCharArray()); 
    trustManagerFactory.init(trustSt); 

    KeyStore keyStore = KeyStore.getInstance("BKS"); 
    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    InputStream keyStoreStream = this.getResources().openRawResource(R.raw.keystore); 
    keyStore.load(keyStoreStream, "password".toCharArray()); 
    keyManagerFactory.init(keyStore, "password".toCharArray()); 

    sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); 
    } 
    catch (NoSuchAlgorithmException nsae){Log.d("SSL", nsae.getMessage());} 
    catch (KeyStoreException kse){Log.d("SSL", kse.getMessage());} 
    catch (IOException ioe){Log.d("SSL", ioe.getMessage());} 
    catch (CertificateException ce){Log.d("SSL", ce.getMessage());} 
    catch (KeyManagementException kme){Log.d("SSL", kme.getMessage());} 
    catch(AccessControlException ace){Log.d("SSL", ace.getMessage());} 
    catch(UnrecoverableKeyException uke){Log.d("SSL", uke.getMessage());} 

    try{ 
     //error catch 
     String error = "test"; 

     sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
     s = (SSLSocket) sslsocketfactory.createSocket("192.168.2.101", port); 

      outStream = s.getOutputStream(); 
      outStreamWriter = new OutputStreamWriter(outStream); 
      bufferedWriter = new BufferedWriter(outStreamWriter); 

      bufferedWriter.write(error + "\n"); 
      bufferedWriter.flush();   

       } //end try 
       catch (UnknownHostException e) {e.printStackTrace();} 
       catch (IOException e) {e.printStackTrace();} 

       finally{ 
        if (s != null){ 
        try {s.close();} 
        catch (IOException e) {e.printStackTrace();} 
        } 
        }//end finally 
} 

我指定一個信任但不不是如何初始化插槽上的信任。

任何幫助,將不勝感激。

+0

「'passowrd」'錯字是故意的嗎? – Nick 2013-04-13 13:50:17

+1

我更改密碼時,我粘貼...是一個錯字 – Alan 2013-04-13 14:27:12

回答

0

我想改變這條線

sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 

使用SSLSocketFactory(KeyStore truststore) constructor可以解決您的問題。

sslsocketfactory = new SSLSocketFactory(trustSt); 
+0

構造函數是爲org.apache.http.conn.ssl.SSLSocketFactory,有語法錯誤,可能是因爲我想使用一個javax。 net.ssl TCP套接字 – Alan 2013-04-15 18:06:13