【发布时间】:2018-07-10 09:59:21
【问题描述】:
我正在尝试一个演示 Android 应用程序来连接 servlet(本地服务器和 aws 实例),它给出了 Handshake failed 错误。我也尝试过使用 volley 和 http 客户端。相关代码和 logcat 结果如下。目前我正在使用Android 7.1版本和redmi 5A手机进行测试。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
execute();
}
void execute() {
new Thread(new Runnable() {
public void run() {
try {
URL url = new URL("https://192.168.0.7:9999/WebS/welcome/test");
URLConnection connection = url.openConnection();
String inputString = "hello server";
//inputString = URLEncoder.encode(inputString, "UTF-8");
Log.d("inputString", inputString);
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write(inputString);
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
Toast.makeText(MainActivity.this, in.toString(), Toast.LENGTH_LONG).show();
in.close();
} catch (Exception e) {
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
}
}).start();}}
Logcat 结果:
app_url E/YOUR_APP_LOG_TAG:我收到一个错误 javax.net.ssl.SSLHandshakeException:握手失败 在 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:429) 在 com.android.okhttp.Connection.connectTls(Connection.java:235) 在 com.android.okhttp.Connection.connectSocket(Connection.java:199) 在 com.android.okhttp.Connection.connect(Connection.java:172) 在 com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367) 在 com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:247) 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126) 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:257) 在 com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) 在 com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java) 在 com.example.cg_dte.app_url.MainActivity$1.run(MainActivity.java:41) 在 java.lang.Thread.run(Thread.java:760) 抑制:javax.net.ssl.SSLHandshakeException:握手失败 ... 15 更多 抑制:javax.net.ssl.SSLHandshakeException:握手失败 ... 15 更多 原因:javax.net.ssl.SSLProtocolException:SSL 握手 中止:ssl=0x7fa2258640:SSL 库失败,通常是协议 错误 错误:100000f7:SSL 例程:OPENSSL_internal:WRONG_VERSION_NUMBER (外部/boringssl/src/ssl/tls_record.c:192 0x7f94590e7e:0x00000000) 在 com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native 方法) 在 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) ... 14 更多 引起:javax.net.ssl.SSLProtocolException:SSL 握手中止: ssl=0x7fa2258640:SSL 库失败,通常是协议错误 错误:100000f7:SSL 例程:OPENSSL_internal:WRONG_VERSION_NUMBER (外部/boringssl/src/ssl/tls_record.c:192 0x7f94590e7e:0x00000000) 在 com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native 方法) 在 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) ... 14 更多 引起:javax.net.ssl.SSLProtocolException:SSL 握手中止: ssl=0x7fa2258640:SSL 库失败,通常是协议错误 错误:100000f7:SSL 例程:OPENSSL_internal:WRONG_VERSION_NUMBER (外部/boringssl/src/ssl/tls_record.c:192 0x7f94590e7e:0x00000000) 在 com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native 方法) 在 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) ... 14 更多
【问题讨论】:
-
尝试添加-Djavax.net.debug=all参数,获取SSL连接过程的详细信息。