B4A Library Network v1.50 - Adds support for SSL sockets

Discussion in 'Additional libraries, classes and official updates' started by Erel, Jul 5, 2015.

  1. Erel

    Erel Administrator Staff Member Licensed User

    This update adds support for SSL sockets (client sockets).

    Example:
    Code:
    Sub Process_Globals
       
    Private so As Socket
       
    Private astream As AsyncStreams
    End Sub

    Sub Globals

    End Sub

    Sub Activity_Create(FirstTime As Boolean)
       so.InitializeSSL(
    "so"Null"")
       so.Connect(
    "bing.com"4430)
    End Sub

    Sub so_Connected (Successful As Boolean)
       
    Log(Successful)
       
    If Successful Then
         astream.Initialize(so.InputStream, so.OutputStream, 
    "astream")
         
    Dim s As String = _
    $"GET / HTTP/1.1
    Host: www.bing.com

    "$

       s = s.Replace(
    CRLFChr(13) & Chr(10))
         astream.Write(s.GetBytes(
    "utf8"))
       
    Else
         
    Log(LastException)
       
    End If
    End Sub

    Sub astream_NewData (Buffer() As Byte)
       
    Log(BytesToString(Buffer, 0, Buffer.Length, "utf8"))
    End Sub

    Sub astream_Error
       
    End Sub

    Sub astream_Terminated
       so.Close
    End Sub
    You can use a custom keystore if needed. The first section in this blog explains how to create the keystore: https://assylias.wordpress.com/2012...er-from-android-with-self-signed-certificate/
    You should then pass an input stream to InitializeSSL:
    Code:
    Dim in As InputStream = File.OpenInput(File.DirAssets, "test.keystore")
    so.InitializeSSL(
    "so"in"123456")
    in.Close
    You can also use InitializeSSLAcceptAll method to accept all certificates automatically. This method is less secure and should be mainly used for testing.

    Installation instructions:
    - Download the attached zip file and copy the files to the internal libraries folder.
     

    Attached Files:

  2. aaronk

    aaronk Well-Known Member Licensed User

    Is there a way to select what version SSL you are going to connect with?

    When I try and connect I am getting: (SSLHandshakeException) javax.net.ssl.SSLHandshakeException: Connection closed by peer

    The product I am connecting to only supports TSLv1 and since Lollipop come out Android now defaults it's self to a newer version which means I had to force the connect to version TLSv1 since the product I am connecting to uses TLSv1.

    socket.setEnabledProtocols(new String[] { "TLSv1", "SSLv3" });
    https://code.google.com/p/android/issues/detail?id=79910

    Can the same thing be added to this Library? Maybe a option to select what version of SSL TLS you want to use ?
     
  3. Erel

    Erel Administrator Staff Member Licensed User

    You can use this code to set the protocols:
    Code:
    Dim r As Reflector
    r.Target = so 
    'socket variable
    r.Target = r.GetField("socket")
    r.RunMethod4(
    "setEnabledProtocols"Array(Array As String("TLSv1""SSLv3")), _
         
    Array As String("[Ljava.lang.String;"))
     
    koaunglay and Peter Simpson like this.
  4. aaronk

    aaronk Well-Known Member Licensed User

    Perfect, seems to of done the job nicely.
    Thanks heaps for providing SSL sockets to the network Library.
     
  5. luke2012

    luke2012 Well-Known Member Licensed User

    Using socket object, Is there a way (event) to intercept a unexpectedly broken connection ? (ex. wifi is out of range or the target IP device is unexpectedly powered off).

    For example in my test I powered off the connected IP device but when I check the connection using "Starter.so.Connected" the property says true (but the connected device isn't powered on).

    I defined the _Error and _Terminated events but they are never fired (when I power off the IP device).
    These events is fired when I go out out WIFI range.
    All the code is defined within the Starter service.
     
    Last edited: Jun 10, 2016
    adiolaru2000 likes this.
  6. Erel

    Erel Administrator Staff Member Licensed User

    Please start a new thread for this question.
     
Loading...