2013-04-11 63 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