Never mind. I figured it out by my own - add the following to the
manifest.

<uses-permission android:name="android.permission.INTERNET" />

On Mar 11, 4:40 pm, telematics <[email protected]> wrote:
> I am new on SSL programming. The Android app I am developing needs to
> open an SSL socket to a secure server which requires the client
> authentication. When running on the Emulator and trying to talk to a
> Server running on the host PC, the following Android code snippet
> always gives me a SocketException at the line, SSLSocket c =
> (SSLSocket) f.createSocket(hostName, 8888) :
>
>     private void openSslClient(String hostName)
>     {
>         try
>         {
>             KeyStore keyStore = KeyStore.getInstance
> (KeyStore.getDefaultType());
>             InputStream fis = this.getAssets().open("client.bks");
>             keyStore.load(fis, "clientjks".toCharArray());
>
>             KeyManagerFactory kmf = KeyManagerFactory.getInstance
> ("X509");
>
>             kmf.init(keyStore, "clientkey".toCharArray());
>
>             TrustManagerFactory tmf = TrustManagerFactory.getInstance
> ("X509");
>
>             tmf.init(keyStore);
>
>             SSLContext sc = SSLContext.getInstance("TLS");
>             sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(),
>                     new SecureRandom());
>
>             SSLSocketFactory f = sc.getSocketFactory();
>             SSLSocket c = (SSLSocket) f.createSocket(hostName, 8888);
>             c.startHandshake();
>             w = new BufferedWriter(new OutputStreamWriter
> (c.getOutputStream()));
>             r = new BufferedReader(new InputStreamReader
> (c.getInputStream()));
>         } catch (Exception e)
>         {
>             Log.e(LOG_TAG, "openSslClient failed", e);
>         }
>     }
>
> The stack trace looks like below:
> 03-11 21:24:00.585: ERROR/OSNetworkSystem(1093): unknown socket error
> -1
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093): openSslClient
> failed
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):
> java.net.SocketException: unknown error
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> org.apache.harmony.luni.platform.OSNetworkSystem.createSocketImpl
> (Native Method)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> org.apache.harmony.luni.platform.OSNetworkSystem.createSocket
> (OSNetworkSystem.java:79)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> org.apache.harmony.luni.net.PlainSocketImpl2.create
> (PlainSocketImpl2.java:59)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> java.net.Socket.startupSocket(Socket.java:668)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> java.net.Socket.<init>(Socket.java:142)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> javax.net.ssl.SSLSocket.<init>(SSLSocket.java:42)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.<init>
> (OpenSSLSocketImpl.java:179)
> 03-11 21:24:07.156: ERROR/PatientDataUploader(1093):     at
> org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl.createSocket
> (OpenSSLSocketFactoryImpl.java:65)
>
> The server test program I am using is a modified version of
> SslReverseEchoer available on Dr. Herong Yang's website. It looks like
> below:
>
>         public static void main(String[] args) {
>                 if (args.length < 3) {
>                         System.out.println("Usage:");
>                         System.out
>                                         .println("   java 
> SslReverseEchoerRevised ksName ksPass ctPass
> ipAddr");
>                         return;
>                 }
>                 String ksName = args[0];
>                 char[] ksPass = args[1].toCharArray();
>                 char[] ctPass = args[2].toCharArray();
>                 String ipAddr = args[3];
>                 try {
>                         KeyStore ks = KeyStore.getInstance("BKS");
>                         ks.load(new FileInputStream(ksName), ksPass);
>                         KeyManagerFactory kmf = 
> KeyManagerFactory.getInstance("SunX509");
>                         kmf.init(ks, ctPass);
>                         TrustManagerFactory tmf = 
> TrustManagerFactory.getInstance("X509");
>                         tmf.init(ks);
>                         SSLContext sc = SSLContext.getInstance("TLS");
>                         sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), 
> null);
>                         SSLServerSocketFactory ssf = 
> sc.getServerSocketFactory();
>                         SSLServerSocket s = (SSLServerSocket) 
> ssf.createServerSocket(8888,
>                                         1, InetAddress.getByName(ipAddr));
>                         s.setNeedClientAuth(true);
>                         printServerSocketInfo(s);
>                         SSLSocket c = (SSLSocket) s.accept();
>                         printSocketInfo(c);
>                         BufferedWriter w = new BufferedWriter(new 
> OutputStreamWriter(c
>                                         .getOutputStream()));
>                         BufferedReader r = new BufferedReader(new 
> InputStreamReader(c
>                                         .getInputStream()));
>                         String m = "Welcome to SSL Reverse Echo Server."
>                                         + " Please type in some words.";
>                         w.write(m, 0, m.length());
>                         w.newLine();
>                         w.flush();
>                         while ((m = r.readLine()) != null) {
>                                 if (m.equals("."))
>                                         break;
>                                 char[] a = m.toCharArray();
>                                 int n = a.length;
>                                 for (int i = 0; i < n / 2; i++) {
>                                         char t = a[i];
>                                         a[i] = a[n - 1 - i];
>                                         a[n - i - 1] = t;
>                                 }
>                                 w.write(a, 0, n);
>                                 w.newLine();
>                                 w.flush();
>                         }
>                         w.close();
>                         r.close();
>                         c.close();
>                         s.close();
>                 } catch (Exception e) {
>                         System.err.println(e.toString());
>                 }
>         }
>
> Can someone shed some light on this?
>
> Thank you in advance.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to