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 핸드 셰이크가 느립니다.
안드로이드에서 정상적인 것인지 아는 사람이 있습니까, 아니면 그렇지 않은 사람이라면 더 빨리 만드는 방법이 있습니까?
감사합니다.
는 21.01.11에서 편집 : 나는 예를 paypal.com:443를 들어, 다른 서버에 연결할 때 핸드 셰이크가 빠른 것을 발견했다
.
하지만 이전에 다른 서버에 연결되었습니다. .NET 서비스가 저에게 작성되었습니다. 이전에 말했듯이, 문제가 서버에 있다고 생각하지 않았습니다. 왜냐하면 내가 iPhone 앱과 연결하면 핸드 셰이크가 빠르기 때문입니다. 이제는 iPhone에서 왜 빠르지, 안드로이드에서는 속도가 느린 지 모르겠습니다. 연결이 설정되면, 나는 .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