Bir sunucuya bağlanmak için SSLSocket kullanan bir Android uygulaması geliştiriyorum. Ben de benzer bir yaptıkSSLSocket kullanarak TLS bağlantısı Android işletim sisteminde yavaş çalışıyor
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.");
}
sorun yaklaşık 5 saniye veya altında doğrultusunda TLS el sıkışma yapmak için daha fazla olay almasıdır: Bu kullanıyorum kodudur iPhone uygulaması, el sıkışma sadece 1 saniye sürüyor, bu yüzden sorunun bağlandığım sunucuda olmadığını düşünüyorum, belki yukarıdaki kodda. Bağlantı yeterince hızlı, sadece TLS el sıkışma yavaş.
herkes bunun Android'de normal olup olmadığını biliyor mu, yoksa değilse, nasıl daha hızlı yapmak için?
Teşekkür ederiz.
21.01.11 tarihinde DÜZENLENECEK: Ben örnek paypal.com:443 için, başka bir sunucuya bağlandığınızda el sıkışma hızlı olduğunu, öğrendim
.
Ama daha önce başka bir sunucuya bağlanıyordum - bana yazılan bir .NET hizmeti. Daha önce de söylediğim gibi, bu sunucuda problem olduğunu düşünmedim çünkü iPhone Uygulamam ile bağlantı kurarsam el sıkışma hızlıdır. Artık iPhone'da neden hızlı olduğunu ve Android'de yavaş olduğunu bilmiyorum. Bağlantı kurulduktan sonra, .NET sunucusunuzda tek şey:
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.");
Evet TLS'nin genellikle saf bir bağlantıdan daha yavaş olduğunu biliyorum, ancak yeterince hızlı. Ancak TLS el sıkışma çok yavaş, 10 saniye sürüyor, daha önce de söylediğim gibi değil. – Arthur