A conexão TLS usando SSLSocket é lenta no sistema operacional Android

Estou desenvolvendo um aplicativo Android que usa SSLSocket para conectar-se a um servidor. Este é o código que estou usando:

// 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.");
}

O problema é que leva cerca de 5 segundos ou mais para realizar o handshake TLS na linha abaixo:

SSLSession session = socket.getSession();

Eu fiz um aplicativo para iPhone semelhante, o aperto de mão leva apenas 1 segundo, então acho que o problema não está no servidor ao qual estou me conectando, talvez no código acima. A conexão em si é rápida o suficiente, apenas o handshake TLS é lento.

Alguém sabe se é normal no Android ou se não é, como torná-lo mais rápido?

Obrigado.

EDITADO em 21.01.11:

Descobri que o aperto de mão é rápido quando me conecto a outro servidor, por exemplopaypal.com:443.

Mas eu já havia me conectado a outro servidor - um serviço .NET escrito por mim. Como eu disse antes, não achei que o problema estivesse nesse servidor, porque se eu me conectar ao meu aplicativo para iPhone, o aperto de mão é rápido. Agora não sei por que é rápido no iPhone e lento no Android. Depois que a conexão é estabelecida, a única coisa que faço no servidor .NET é:

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.");

questionAnswers(4)

yourAnswerToTheQuestion