Android 的自签名证书和 Loopj

2024-02-17

我正在尝试使用loopj http://loopj.com/android-async-http制作async HTTP要求。效果很好,除了当我尝试使用自签名证书访问 https 网站时。我明白了

javax.net.ssl.SSLPeerUnverifiedException: No peer certificate.

我猜是默认的ssl选项可以被覆盖使用setSSLSocketFactory(SSLSocketFactory sslSocketFactory)方法,但我不知道该怎么做,或者它可能根本不是正确的方法。

请建议我如何解决这个问题?


您所做的几乎与此处为 HttpClient 解释的完全相同,只是稍微简单一点 -通过 HTTPS 使用 HttpClient 信任所有证书 https://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https

创建自定义类:

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ssl.SSLSocketFactory;
public class MySSLSocketFactory extends SSLSocketFactory {
    SSLContext sslContext = SSLContext.getInstance("TLS");

    public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
        super(truststore);

        TrustManager tm = new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sslContext.init(null, new TrustManager[] { tm }, null);
    }

    @Override
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
    }

    @Override
    public Socket createSocket() throws IOException {
        return sslContext.getSocketFactory().createSocket();
    }
}

然后当您创建客户端实例时:

try {
      KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
      trustStore.load(null, null);
      sf = new MySSLSocketFactory(trustStore);
      sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
      client.setSSLSocketFactory(sf);   
    }
    catch (Exception e) {   
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 的自签名证书和 Loopj 的相关文章

随机推荐

  • Webclient:java.lang.OutOfMemoryError:直接缓冲内存

    我在 Web 客户端收到 java lang OutOfMemoryError Direct buffer memory 错误 批处理作业每天运行 两次失败 第三次就通过了 at org springframework retry supp
  • 按日期范围查询 dynamoDB

    我正在开发一个允许用户读书的应用程序 我正在使用 DynamoDB 来存储用户阅读的书籍的详细信息 并且我计划使用 DynamoDB 中存储的数据来计算统计数据 例如趋势书籍 作者等 我当前的架构如下所示 user id timestamp
  • Rails:如何让 Jquery 在单击后更新数据库列

    首先 我知道我正在尝试做的事情对于 Rails 来说并不典型 我愿意接受更好的替代方案的建议 我是 Rails 新手 所以欢迎提出建议 基本上 我有一个包含 5 个通知的通知栏 用户单击并看到通知后 我想将数据库中名为 saw 的列设置为
  • 片段和片段活动本质上比活动更快吗?

    片段和片段活动本质上比活动更快吗 如果我不需要在片段中加载我的活动 我应该使用 FragmentActivities 和 Fragments over Activity 吗 我问这个问题的原因是因为我多年来一直专门使用 Activity 而
  • Java 8 可选和 flatMap - 有什么问题?

    一些代码 public class Player Team team String name public class Team List
  • TDD 如何处理模拟对象中的更改

    在编写单元测试时 对于单元与之交互的每个对象 我正在采取这些步骤 从我对 JBrains 的理解中窃取 集成测试是一个骗局 http www infoq com presentations integration tests scam 在单
  • Grunt cssmin / CleanCSS 源映射变基

    我使用 cssmin 和以下 内容 文件夹结构 src dir1 style1 css images image1 png dir2 style2 css images image2 png dist styles min css styl
  • Chrome 不显示网站图标

    我无法显示该网站的图标http www lowcoupling com http www lowcoupling com在铬上 我已经用 Safari 检查过 图标显示正确 我应该如何修复它 UPDATE 这是我的 css 的第一部分
  • 用于执行外部 MSBuild 文件的 MSBuild 任务

    我正在尝试设置一个 MSBuild 文件 该文件将调用另一个 MSBuild 文件 我想知道实现此目的的最佳方法是什么 我们在构建服务器下载 MSBuild 文件的情况下使用它 然后根据参数执行相应的第二个文件 我知道我可以使用
  • 针对 Windows Phone ARM 目标的 Clang 交叉编译

    我想使用 Clang 为 Windows Phone ARM 目标编译一个用 C 编写的程序 有人有这方面的经验吗 什么是更好的方法 1 使用 Clang for Windows 和 MinGW 在运行 Windows 8 的主机上构建 C
  • 确定分发这些优惠券的最佳方式的算法是什么?

    这是我的问题 假设我要购买 3 种不同的商品 并且我最多有 5 张优惠券 优惠券可以互换 但用于不同商品时价值不同 以下矩阵给出了在不同商品上花费不同数量的优惠券的结果 coupons 1 2 3 4 5 item 1 10 off 15
  • Flutter Google 地图无法确定设备的当前位置

    我使用 Flutter 的 Geolocator 和 Google Maps 包来确定设备的位置 我利用圆形进度条来等待确定当前位置 一旦确定 Google 地图就会加载已识别的设备位置 当应用程序加载时 会显示圆形进度条 但尽管显示并接受
  • Symfony + Doctrine - 定义完整性约束错误时的错误消息

    当我尝试删除项目时出现完整性约束错误时 我试图显示一条不错的错误消息 我只想显示如下消息 而不是出现错误 500 您无法删除此内容 因为某些项目已链接到它 我已经搜索了一段时间 但我总是找到 如何解决此错误 的解决方案 我不想解决它 我只是
  • 跟踪表中的更改

    我的同事向我提出了一个我无法回答的问题 由于缺乏经验 该问题与跟踪表上相关字段的更改有关 假设我们有 3 个表 每个表有 20 个字段 让我们考虑一下这个示例 其中每个表都有 2 个字段 一个名为 LastUpdatedOn 另一个名为 L
  • 如何在字符串中存储颜色?

    如果颜色是人类可读格式 我想将颜色存储在字符串中 如果不是 则将其存储在 ToArgb 中 颜色是红色 然后将其存储在 Red 字符串中 如果颜色是绿色的某种变体 则将其存储为 ff40ff80 在运行时我想将此字符串转换回 Color 类
  • Rails 路由 - 如何将范围参数添加到 url_for 帮助器?

    我有资源生物 在视图和添加新生物的链接中是 link to Add new bio new admin bio 如果我将资源 bio放入这样的范围 namespace admin do scope bio type defaults gt
  • 使用 AutoMapper 映射字典

    鉴于这些类 我如何映射它们的字典 public class TestClass public string Name get set public class TestClassDto public string Name get set
  • Spring boot - 不是托管类型

    我使用 Spring boot JPA 并在启动服务时遇到问题 Caused by java lang IllegalArgumentException Not an managed type class com nervytech dia
  • sqlite3,IntegrityError:插入值时唯一约束失败

    为了防止我的数据库变得太大 我希望 sqlite 只插入尚未插入的值 我做了一些搜索 并认为最好的方法是使用 UNIQUE 约束 在我看来 插入不唯一的值时 sqlite 会崩溃 如何避免此错误并继续下一次提交 下面是一些相关代码 sql
  • Android 的自签名证书和 Loopj

    我正在尝试使用loopj http loopj com android async http制作async HTTP要求 效果很好 除了当我尝试使用自签名证书访问 https 网站时 我明白了 javax net ssl SSLPeerUn