java - Java Android开发 “Failure in SSL library, usually a protocol”

标签 java android gradle

我正在编写一个仅用于与Android Studio进行测试的应用程序。我想使用字符串((strings [0]))请求带有POST参数的服务器。

但是我总是得到这个异常:

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6f427ff108: Failure in SSL library, usually a protocol error error:1000042e:SSL routines: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()) {
                    //…
                }
[...]

我再也没有了。

最佳答案

[...]
                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

关于java - Java Android开发 “Failure in SSL library, usually a protocol”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326393/

相关文章:

java - Java 中的位级操作

Java FX - 如何创建没有内容的标签以在布局管理器中保留位置?

java - 如何通过将私有(private)变量作为类成员函数中的参数传递来覆盖私有(private)变量?

android - 在 Wear 和 Android 应用之间共享类(class)的最佳做法是什么?

java - Gradle:找不到名称为 'default' 的配置

android - 导入库仅用于调试,不用于发布

java - 在 Windows 上设置 New Relic for Railo 4.x

java - 使用 Smooks 读取 CSV

android - Andy 模拟器上的 Charles 代理问题(失败 :SSLHandshake: Unsupported curveId: 29 )

android - SharedPreferences setChecked 崩溃