【问题标题】:Java Android Developing "Failure in SSL library, usually a protocol"Java Android 开发“SSL 库失败,通常是协议”
【发布时间】:2020-04-07 03:10:12
【问题描述】:

我正在编写一个应用程序,只是为了使用 Android Studio 进行测试。我想使用字符串中的 POST 参数请求服务器:(字符串 [0])。

但我总是得到这个异常:

javax.net.ssl.SSLProtocolException: SSL 握手中止: ssl=0x6f427ff108: SSL 库失败,通常是协议错误 错误:1000042e:SSL 例程:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION (external/boringssl/src/ssl/tls_record.cc:587 0x6fa8195d88:0x00000001)

我也尝试过使用 httpok。

https://square.github.io

服务器使用 TLSV1.2

[...]
                byte[] postData = strings[0].getBytes(StandardCharsets.UTF_8);
                int postDataLength = postData.length;

                URL url = new URL("https://example.com");

                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

                //
                conn.setDoOutput(true);
                conn.setInstanceFollowRedirects(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestProperty("charset", "utf-8");
                conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
                conn.setUseCaches(false);

                //
                // TLSv1 | TLSv1.1 | TLSv1.2
                SSLContext sc = SSLContext.getInstance("TLSv1.2");
                sc.init(null, null, new java.security.SecureRandom());
                sc.getProtocol();
                sc.getSupportedSSLParameters();
                sc.getDefaultSSLParameters();
                SSLEngine engine = sc.createSSLEngine();


                conn.setSSLSocketFactory(sc.getSocketFactory());

                conn.connect();
                try (final InputStream in = conn.getInputStream()) {
                    //…
                }
[...]

我没有更进一步。

【问题讨论】:

    标签: java android gradle


    【解决方案1】:
    [...]
                    byte[] postData = strings[0].getBytes(StandardCharsets.UTF_8);
                    int postDataLength = postData.length;
    
                    URL url = new URL("https://example.com");
      // The url has to be set to an international variable
    
                    new Thread(new Runnable() {
                         public void run() {
    
                            // The url has to be fetched from an international variable
                            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    
                    //
                            conn.setDoOutput(true);
                            conn.setInstanceFollowRedirects(false);
                            conn.setRequestMethod("POST");
                            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                            conn.setRequestProperty("charset", "utf-8");
                            conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
                            conn.setUseCaches(false);
    
                            //
                            // TLSv1 | TLSv1.1 | TLSv1.2
                            SSLContext sc = SSLContext.getInstance("TLSv1.2");
                            sc.init(null, null, new java.security.SecureRandom());
                            sc.getProtocol();
                            sc.getSupportedSSLParameters();
                            sc.getDefaultSSLParameters();
                            SSLEngine engine = sc.createSSLEngine();
    
    
                            conn.setSSLSocketFactory(sc.getSocketFactory());
    
                            conn.connect();
                          });
                        }
                    }).start();
    
                    try (final InputStream in = conn.getInputStream()) {
                        //…
                    }
    [...]
    

    https://developer.android.com/guide/components/processes-and-threads

    【讨论】:

    • 我对这个答案投了反对票,因为它不包含任何解释。
    猜你喜欢
    • 2017-01-09
    • 2019-01-14
    • 2012-01-31
    • 2018-09-05
    • 2018-07-10
    • 1970-01-01
    • 2021-06-14
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多