如何在 Android 4.1+ 上将自签名 SSL 证书导入到 Volley

2024-05-03

我开发的android应用程序使用Volley。 所有通信均通过HTTPS联系。 因为我是在本地环境测试的,所以我对Tomcat使用自签名证书。

之前我只有安卓2.3 and 3.0设备。现在我也有了4.1和4.4.

我的实现使用这种方法:http://developer.android.com/training/articles/security-ssl.html http://developer.android.com/training/articles/security-ssl.html (part 未知的证书颁发机构) 在 Android 设备上高达 4.1它工作得很好。带有自定义证书的 SSLSocketFactory 被传递给 Volley:

Volley.newRequestQueue(getApplicationContext(), new HurlStack(null, socketFactory));

但是 Android 4.1+ 上会发生什么? 为什么它不起作用? 我也尝试过NullX509信任管理器像这样:

private static class NullX509TrustManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)
            throws CertificateException {
    }

    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
            throws CertificateException {
    }

    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}

但它仍然不起作用...


信任所有 SSL 证书:- 如果您想在测试服务器上进行测试,可以绕过 SSL。 但请勿将此代码用于生产。

public static class NukeSSLCerts {
protected static final String TAG = "NukeSSLCerts";

public static void nuke() {
    try {
        TrustManager[] trustAllCerts = new TrustManager[] { 
            new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    X509Certificate[] myTrustedAnchors = new X509Certificate[0];  
                    return myTrustedAnchors;
                }

                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {}

                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {}
            }
        };

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
    } catch (Exception e) { 
    }
}

}

请在 Activity 或应用程序类的 onCreate() 函数中调用此函数。

NukeSSLCerts.nuke();

这可以用于 Android 中的 Volley。 更多参考https://new Fivefour.com/android-trust-all-ssl-certificates.html https://newfivefour.com/android-trust-all-ssl-certificates.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 4.1+ 上将自签名 SSL 证书导入到 Volley 的相关文章

随机推荐

  • 如何使用 gulp webpack-stream 生成正确命名的文件?

    目前我们正在使用Webpack https webpack github io 对于我们的模块加载器 以及Gulp http gulpjs com 对于其他一切 sass gt css 以及开发 生产构建过程 我想将 webpack 的东西
  • 与 Python 中的另一个命令行程序交互

    我需要编写一个 Python 脚本 它可以运行另一个命令行程序并与其标准输入和标准输出流交互 本质上 Python 脚本将从目标命令行程序中读取数据 通过写入其 stdin 进行智能响应 然后再次从程序中读取结果 它会重复执行此操作 我查看
  • Microsoft 认知 API 的正确密钥

    我目前正在尝试在 MS 认知服务 Bing 搜索 API 上进行新闻搜索 我读过很多文档 但似乎被困住了 这是我正在使用的代码 url https bingapis azure api net api v5 news search q mi
  • C++ 进程管理 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个众所周知的 可移植的 好的 C 进程管理库 我发现了一个很有前途的图书馆叫做升压过程 htt
  • Java Keystore 是否存在性能问题? [复制]

    这个问题在这里已经有答案了 我们开发了一个应用程序来加密 解密来自服务器的请求 响应 我们正在做性能测试 加密 解密应用程序 我们观察到加密 解密过程需要时间 而许多线程 正在同时做 为了识别问题 我们记录了加密 解密过程中的所有方法 从记
  • ERRO[0001] 等待容器时出错:上下文已取消

    运行 docker 镜像时出现错误 看起来问题出在我的电脑上 我使用的是 MacOS 10 13 6 我已按照步骤创建 docker 映像 Sanjeet server api sanjeet docker build t apiconta
  • 删除 ggplot 地图/choropleth 中的边框线

    我想删除 ggplot 中生成的等值线区域之间的线 我的问题是由一张非常大的地图引起的 其中包含非常非常小的区域 人口普查区块组 这些区域数量如此之多 以至于鉴于边界的密度 不可能看到填充形状的颜色 我在 Mac 上使用更新后的 RStud
  • “isset构造”有捷径吗?

    我经常写这行代码 myParam isset params myParam params myParam defaultValue 通常 它会使嵌套数组的行变得很长 我可以把它改短一点吗 function getOr var default
  • ZeroMQ在多线程应用程序中处理中断

    多线程环境下ZeroMQ的优雅退出 规格 带有 c 11 的 ubuntu 16 04 libzmq 4 2 3 示例代码 static int s interrupted 0 static void s signal handler in
  • 从 Google Build 部署 Google Cloud 功能

    当尝试部署一个简单的功能时 我遇到了 403 错误 这是我的完整 yaml steps Install Dependencies name python id Pip install args pip3 install r requirem
  • 如何确定使用哪个框架来构建特定的 Windows 桌面应用程序?

    如何确定使用哪个平台或编程语言来构建特定的 Windows 桌面应用程序 有多种方法可以尝试检测特定软件是用哪种语言编写的 通常 执行检查的工具PE标头 http en wikipedia org wiki Portable Executa
  • 如何在 awk 或 sed 中编写查找所有函数(使用正则表达式)

    我有运行 python 的 bash 函数 它从标准输入返回所有找到的正则表达式 function find all python c import re import sys print n join re findall 1 sys s
  • 为什么使用牛顿法的 FindMaximum 会抱怨找不到足够的函数减少?

    首先 这看起来 来自 ContourPlot 是一个相当简单的最大化问题 为什么使用牛顿法的 FindMaximum 会出现问题 其次 如何摆脱警告 第三 如果我无法摆脱这些警告 我如何判断警告是否有意义 即最大化失败 例如 在下面的代码中
  • “System.Composition.TypedParts.dll”在哪里?

    我正在尝试使用容器配置来自托管扩展性框架 MEF 的类型 根据here http msdn microsoft com en us library system composition hosting containerconfigurat
  • 尝试将 nil 与数字堆栈回溯进行比较?

    我正在通过以下链接玩 Lua https www lua org pil 4 2 html https www lua org pil 4 2 html并对某一点感到困惑 Lua 5 2 4 Copyright C 1994 2015 Lu
  • 我在统一复制门时遇到问题

    我正在尝试统一复制我的门 但是 当我尝试这样做时 只有原来的门正在执行打开和关闭等动画 我有一个 UI 按钮 它使用 OnClick 函数来操作门 当我输入触发器时它会弹出 这是带有OnClick功能的按钮UI https i stack
  • iReport:如何隐藏带有文本字段的行,而没有数据行包含不同类型的数据

    我有空文本字段 它包含字符串或大十进制值 放在为我的报告拉出的单行上 该行显示一个空行 为了删除具有空行的空白行 我使用了该属性isRemoveLineWhenBlank对于该行中的报表元素 但这是行不通的 有人可以帮我解决这个问题吗 sn
  • usort 不适用于 laravel 多维数组

    我有一个数组 Illuminate Support Collection Object items protected gt Array 0 gt stdClass Object id gt 79 name gt shelin status
  • 我可以实施对半取偶吗?

    我需要去做四舍五入到偶数 https en wikipedia org wiki Rounding Round half to even在浮子上 即 如果该值是两个整数之间的中间值 打破平局 y 的小数部分正好是 0 5 则四舍五入到最接近
  • 如何在 Android 4.1+ 上将自签名 SSL 证书导入到 Volley

    我开发的android应用程序使用Volley 所有通信均通过HTTPS联系 因为我是在本地环境测试的 所以我对Tomcat使用自签名证书 之前我只有安卓2 3 and 3 0设备 现在我也有了4 1和4 4 我的实现使用这种方法 http