TLS-Verbindung mit SSLSocket langsam in Android-OS

Ich bin die Entwicklung einer Android-app, die verwendet SSLSocket eine Verbindung zu einem server. Dies ist der code den ich verwende:

//Connect
if (socket == null || socket.isClosed() || !socket.isConnected()) {
    if (socket != null && !socket.isClosed())
        socket.close();
    Log.i(getClass().toString(), "Connecting...");
    if (sslContext == null) {
        sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustAllCerts, new SecureRandom()); 
    }
    SSLSocketFactory socketFactory = sslContext.getSocketFactory();
    socket = (SSLSocket)socketFactory.createSocket(host, port);
    socket.setSoTimeout(20000);
    socket.setUseClientMode(true);
    connected = true;
    Log.i(getClass().toString(), "Connected.");
}

//Secure
if (connected) {
    Log.i(getClass().toString(), "Securing...");
    SSLSession session = socket.getSession();
    secured = session.isValid();
    if (secured) {
        Log.i(getClass().toString(), "Secured.");
    }
    else
        Log.i(getClass().toString(), "Securing failed.");
}

Das problem ist, dass es dauert etwa 5 Sekunden oder Ereignis mehr zu tun, der TLS-handshake in der Zeile darunter:

SSLSession session = socket.getSession();

Ich habe eine ähnliche iPhone-app, der Handschlag dauert nur 1 Sekunde da, so dass ich denke, das problem ist nicht der server bin ich verbunden, es ist vielleicht in dem code oben. Die Verbindung selbst ist schnell genug, nur der TLS-handshake ist langsam.

Weiß jemand, ob es normal bei Android, oder wenn es ist nicht, wie es schneller zu machen?

Danke.

BEARBEITET am 21.01.11:

Habe ich heraus gefunden, dass der handshake ist schnell, wenn ich eine Verbindung zu einem anderen server, zum Beispiel paypal.com:443.

Aber ich hatte die Verbindung zu einem anderen server bevor - ein .NET-service von mir geschrieben. Da hatte ich vorher sagte, ich glaube nicht, das problem war, dass die server, weil wenn ich eine Verbindung mit meinem iPhone App der handshake ist schnell. Nun weiß ich nicht, warum es ist schnell auf dem iPhone und langsam auf Android. Nachdem die Verbindung hergestellt wurde, die einzige Sache, die ich tun .NET-server ist:

Console.WriteLine("New client connected.");
this.sslStream = new SslStream(tcpClient.GetStream(), true);
this.sslStream.ReadTimeout = 15000;
this.sslStream.WriteTimeout = 15000;

Console.WriteLine("Beginning TLS handshake...");
this.sslStream.AuthenticateAsServer(connection.ServerCertificate, false, SslProtocols.Tls, false);
Console.WriteLine("TLS handshake completed.");
InformationsquelleAutor Arthur | 2011-01-19
Schreibe einen Kommentar