当前位置: 首页 > 知识库问答 >
问题:

为什么截击会回到SSLV3?

公孙霖
2023-03-14

我一直在监控我的应用程序错误,我看到下面的错误太多次了

 javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb8f0fc28: Failure in SSL library, usually a protocol error

错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败(外部/openssl/SSL/s23\u clnt.c:741 0xaa48cd5c:0x00000000)-javax。网ssl。SSLHandshakeException:javax。网ssl。SSLProtocolException:SSL握手中止:SSL=0xb8f0fc28:SSL库中出现故障,通常是协议错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败(外部/openssl/SSL/s23_clnt.c:741 0xaa48cd5c:0x00000000)

您可以看到错误是关于SSLV3的,我的服务器只支持TLSV1。2.

似乎在某些客户机上,Volley退回到使用SSLV3(出于某种原因),并且他们得到了一个错误。

获得此错误的用户在Android4.4.2, 4.4.4和4.1.1及更多。

有趣的是,我也在同一个应用程序中使用DefaultHttpClient,但它似乎没有报告相同的问题。

我在截击中使用默认的投掷堆栈

我看过以下...在HttpsURLConnection中禁用SSL作为协议

和https://code.google.com/p/android/issues/detail?id=78187

那么我有什么选择呢?

>

  • 我的假设正确吗,截击落回SSLV3?

    为什么截击会退回到SSLV3?换句话说,导致回退的最初失败是什么?如何解决?

    我最近下载了截击,但我不确定它是最新的。如何找到我的版本?。

    有什么想法吗?

  • 共有1个答案

    戈睿识
    2023-03-14

    您的服务器不支持SSLv3,因为它有一些安全问题,不应该使用。

    当使用Kitkat之前的Android版本时,您必须使用删除SSLv3的套接字工厂,以用作默认配置:

    public class VolleyToolboxExtension extends Volley {
        /** Default on-disk cache directory. */
        private static final String DEFAULT_CACHE_DIR = "volley";
    
        /**
         * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it.
         *
         * @param context A {@link Context} to use for creating the cache dir.
         * @param stack An {@link HttpStack} to use for the network, or null for default.
         * @return A started {@link RequestQueue} instance.
         */
        public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
            File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
            String userAgent = "volley/0";
            try {
                String packageName = context.getPackageName();
                PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
                userAgent = packageName + "/" + info.versionCode;
            } catch (PackageManager.NameNotFoundException e) {
    
            }
            if (stack == null) {
                if (Build.VERSION.SDK_INT >= 9) {
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                        // Use a socket factory that removes sslv3
                        stack = new HurlStack(null, new NoSSLv3Compat.NoSSLv3Factory());
                    } else {
                        stack = new HurlStack();
                    }
                } else {
                    // Prior to Gingerbread, HttpUrlConnection was unreliable.
                    // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
                    stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
                }
            }
            Network network = new BasicNetwork(stack);
            RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
            queue.start();
            return queue;
        }
    
        /**
         * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it.
         *
         * @param context A {@link Context} to use for creating the cache dir.
         * @return A started {@link RequestQueue} instance.
         */
        public static RequestQueue newRequestQueue(Context context) {
            return newRequestQueue(context, null);
        }
    
    }
    

    可以在以下位置找到NoSSLv3Compat类:https://github.com/Floens/volley/blob/master/src/com/android/volley/compat/NoSSLv3Compat.java

    使用此扩展创建您的请求队列:

        /**
         * @return The Volley Request queue, the queue will be created if it is null
         */
        public RequestQueue getRequestQueue() {
            // lazy initialize the request queue, the queue instance will be
            // created when it is accessed for the first time
            if (mRequestQueue == null) {
                // Create the request queue
                mRequestQueue = VolleyToolboxExtension.newRequestQueue(getApplicationContext());
            }
    
            return mRequestQueue;
        }
    

    您也可以使用改型而不是截击,因为Square发布了该库的2.1版本,支持TLS版本配置:

    http://square.github.io/retrofit/

     类似资料:
    • 问题内容: 为什么在代码的指定位置出现ConcurrentModificationException?我无法弄清楚自己在做什么错… 正在使用该方法在列表中找到分钟,将其删除并返回其值 问题答案: 一旦修改了从其获得的Collection,则不应认为Iterator可用。(对于java.util.concurrent。*集合类,放宽了此限制。) 您首先要获得一个Iterator ,然后进行修改。修改

    • 问题内容: 我在代码的第34行上不断收到LineUnavailableException:https://www.refheap.com/21223 错误显示为。 我正在创建Sound类的多个实例(在我的refheap粘贴中实现)。似乎最初的实例没有问题。但是,当我开始使用相同的音频文件制作Sound对象的新实例时,便开始出现此错误。 知道如何解决吗? EIDT:我认为这个问题的 想法可能是我需要

    • 我每次都会得到新的回应。 我想知道为什么用第一种方法得到同样的reponse?

    • 我尝试在Jasper报告中格式化日期,它适用于Windows但不适用于Linux。对于Linux,结果文本被截断。 JRXML: Maven依赖关系: 我读到: 用jasperreport生成的PDF在Linux上显示不佳,但在Mac上显示良好,可能与os有关吗? http://community.jaspersoft.com/questions/527138/pdf-text-truncated

    • 我使用反应原生66时运行得到错误 Yarn run v1.22.17$react-原生run-android info运行jetifier将库迁移到AndroidX。您可以使用“--no-jetifier”标志禁用它。Jetifier发现1428个文件要转发jetify。使用4个工作人员... info JS服务器已经运行。信息安装应用程序...配置项目:react-nate-fire base

    • 我正在尝试使用Minecraft Forge 1.8库为Minecraft开发一个mod。对于我的mod,我决定创建自己的自定义箭头,从我的自定义弩中发射。在为箭头放置我的Item、Entity和Render类后,我发现箭头继续击中玩家,但它被抛出。我尝试实现并对箭头的射手进行了调试检查,但我找不到问题。 这是来自EntityArrow类的代码:onUpdate(): 在弩中的鼠标右键单击()中声