SSLSocketを使用してサーバーに接続するAndroidアプリを開発しています。私は似たをしたSSLSocketを使用したTLS接続がAndroid OSで遅い
SSLSession session = socket.getSession();
:
// 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.");
}
問題は、それが約5秒以下の行にTLSハンドシェイクを行うためのより多くのイベントを取るということです。これは私が使用しているコードです。 iPhoneアプリでは、ハンドシェークにはわずか1秒しかかからないので、私が接続しているサーバーに問題がないと思います。それはおそらく上記のコードにあります。接続自体は十分速く、TLSハンドシェイクは遅いです。
Androidで正常かどうかは誰にも分かりませんが、そうでない場合はどうすれば速くできますか?
ありがとうございます。
は21.01.11で編集:
私は、私は別のサーバーに接続したときに握手を例paypal.com:443ため、高速であること、を見出しました。
しかし私は前に別のサーバーに接続していました - 私が書いた.NETサービス。私が前に言ったように、問題はサーバーにあるとは思っていませんでした。なぜなら私がiPhone Appと接続すると、ハンドシェイクが速くなるからです。今はなぜiPhoneで高速で、Androidで遅いのか分かりません。接続が確立された後、私は.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.");
はい私はTLSが一般的に純粋な接続よりも遅いが、十分に速いことを知っています。しかし、TLSのハンドシェイクは非常に遅いです、私が前に言ったように5秒ではなく、10秒かかります。 – Arthur