证书随机未正确创建

2023-12-25

我创建了一个自定义 httpclient,用于接收自定义信任存储,并将其用于它尝试访问的所有 ssl 站点。这是代码:

public class MyHttpClient extends DefaultHttpClient {

    private Context context;

    public MyHttpClient(Context context) {

        this.context = context;
    }

    @Override
    protected ClientConnectionManager createClientConnectionManager() {

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory
                .getSocketFactory(), 80));
        registry.register(new Scheme("https", newSslSocketFactory(), 443));
        return new SingleClientConnManager(getParams(), registry);
    }

    private SSLSocketFactory newSslSocketFactory() {

        try {
            KeyStore trusted = KeyStore.getInstance("BKS");
            InputStream in = context.getResources().openRawResource(
                    R.raw.cacerts);
            try {
                trusted.load(in, "changeit".toCharArray());
            }
            catch (CertificateException c) {
                System.out
                        .println("There was a certificate exception in myhttpclient!");
            }
            finally {

                in.close();
            }
            return new SSLSocketFactory(trusted);
            }
            catch (Exception e) {
                throw new AssertionError(e);
            }
    }
}

这是它给我的堆栈跟踪:

W/System.err(4194): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
W/System.err(4194):     at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:258)
W/System.err(4194):     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
W/System.err(4194):     at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
W/System.err(4194):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
W/System.err(4194):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err(4194):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err(4194):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
W/System.err(4194):     at org.apache.http.impl.client.AbstractHttpClient$1.executeRequestSending(AbstractHttpClient.java:608)
W/System.err(4194):     at org.apache.http.impl.client.naf.redirect.NafRequestExecutorWrapperRedirectionHandler.executeRequestSendingUsual(NafRequestExecutorWrapperRedirectionHandler.java:96)
W/System.err(4194):     at org.apache.http.impl.client.naf.redirect.NafRequestExecutorWrapperRedirectionHandler.executeRequestSending(NafRequestExecutorWrapperRedirectionHandler.java:73)
W/System.err(4194):     at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.sendFirstRequest(NafHttpAuthStrategyDefault.java:487)
W/System.err(4194):     at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.performAuthExecutionUnsafe(NafHttpAuthStrategyDefault.java:388)
W/System.err(4194):     at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.performAuthExecution(NafHttpAuthStrategyDefault.java:200)
W/System.err(4194):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:556)
W/System.err(4194):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:505)
W/System.err(4194):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:483)
W/System.err(4194):     at com.wmmccreedy.vce.AgConnection.submitInfo(AgConnection.java:111)
W/System.err(4194):     at com.wmmccreedy.vce.LoginSubmitActvity$DownloadWebPageTask.doInBackground(LoginSubmitActvity.java:199)
W/System.err(4194):     at com.wmmccreedy.vce.LoginSubmitActvity$DownloadWebPageTask.doInBackground(LoginSubmitActvity.java:1)
W/System.err(4194):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
W/System.err(4194):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
W/System.err(4194):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
W/System.err(4194):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
W/System.err(4194):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
W/System.err(4194):     at java.lang.Thread.run(Thread.java:1019)

现在,这可以正常工作......大约 50% 的时间。我通过创建 while 循环“解决”了这个问题。它继续重新创建 httpclient 客户端并尝试一遍又一遍地访问服务器,直到它正常工作,通常只需要 1 到 2 次尝试(我见过的最多是 4 次)。显然,这是非常低效的。

我已将问题范围缩小到上面发布的类,因为如果我仅创建一次 httpclient 并尝试使用同一类多次访问该站点,它要么总是失败,要么总是成功,具体取决于是否我有一个“好”的httpclient,或者一个“坏”的httpclient。 但是,如果我每次尝试访问网页时都创建 httpclient,它有时会起作用,有时则不起作用。

那么为什么会这样做,我该如何解决这个问题呢?为什么它只是间歇性地工作,客户的创作之间可能会发生什么变化?

编辑:解决了!

看来我在我的信任库中留下了一些别名的旧版本,并且它随机选择第一个找到的别名,但最终并不总是正确的。每个别名都包含所有相同的证书,但每个别名都以不同的顺序包含所有证书。我进行了测试,直到找到正确的商店,删除了其余的,现在一切都很完美。


这不是“证书创建”问题。

服务器(对等方)未向您发送证书。这可能是因为它在其密钥库中找不到由您的信任库信任的人签名的密钥。

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

证书随机未正确创建 的相关文章

随机推荐

  • AngularJS 可与哪些浏览器配合使用?

    这可能是一个最常见的问题 但没有任何关于浏览器版本的线索 而且 角度站点 https docs angularjs org misc faq what browsers does angularjs work with 其本身如下所述 An
  • 在列表视图中添加不同类型的项目

    是否有一个很好的教程或链接显示如何将不同的项目添加到列表视图 例如 一加二文本行 and a 复选框 另一个你只需按下 就会弹出一些东西 我现在所拥有的是每个列表项都是相同的两行文本视图和复选框 Or 如果有办法通过不同的布局一次添加 1
  • -webkit-transform 在 Internet Explorer 中不起作用

    我发现 webkit transform rotateZ 10deg 在 Internet Explorer 9 中不起作用 可以使用什么来代替 CSS3 你有没有尝试过 ms transform rotateZ 10deg As webk
  • 打印图像c#.net

    我在 PictureBox 中有一张图像 我想打印它 无需格式化 无需任何操作 只需打印即可 我一直在谷歌上搜索 但一无所获 只有人们打印表格 文本或报告 private string imgSrc public string ImgSrc
  • jMeter 未将变量应用于标头管理器

    我在 Mac 上使用 Apache JMeter 3 2 r1790748 我有一个setUp Thread Group进行身份验证调用 该调用有效并正确输出令牌 现在我需要将该令牌传递给HTTP Header Manager我拨打的所有电
  • 如何模拟私有 dao 变量?

    我有一个dao create 在测试方法时调用我想要模拟的方法 但我错过了一些东西 因为我仍然得到 NPE 这里有什么问题吗 class MyService Inject private Dao dao public void myMeth
  • 如何关闭特定列的 ag-grid 快速过滤器

    AG grid 有 快速过滤 https www ag grid com javascript grid filter quick 功能 本质上是一个搜索所有列的自由文本搜索过滤器 问题是 在某些列中 我有日期时间值 但我不想搜索这些列中的
  • 在 linq 中选择两列之间的最大值

    我在产品表中有 dateSend 列和 dateEdit 列 我可以使用以下代码选择 max dateSend from pro in Products ToList select new pro DateSend Max 但我在 date
  • PHP 的 var_dump / print_r 输出是乱码 - 编码问题?

    我遇到的问题是服务器上的输出var dump and print r出来完全是乱码 print r输出纯粹的乱码 例如 W 8 等 同时var dump至少给出string 1664 后面是类似的胡言乱语 尽管这次用双引号引起来 这看起来像
  • 聚合广告点击次数和浏览次数

    下表跟踪每个广告系列的点击次数和浏览次数 record id advert id type 1 100 click 2 102 click 3 100 view 4 100 view 5 102 view 6 100 view 7 101
  • 如何在 git 中显示标签的完整历史记录?

    git 中的标签显然可以通过简单地删除它们然后重新标记来从一个提交移动到另一个提交 例如 git tag m Version 1 0 v1 0 abcd123 git push tags git tag d v1 0 git tag m C
  • 在 iOS 中获取蓝牙低功耗外设的 MAC 地址

    我目前正在开发一个基于蓝牙低功耗设备的 iOS 应用程序 为了获得唯一的标识符来比较所获得的外设 我必须获取外设的 MAC 地址 据观察 外围设备的 UUID 属性在不同的 iOS 设备上有所不同 并且外围设备要获得 UUID 它必须至少连
  • Python 3 unicode 编解码器在 tkinter 中绑定鼠标滚轮时出错

    在 MacOS 上使用 Python 3 6 tkinter 我在画布中创建了一个框架并将滚动条绑定到它 这一切都很好 问题是当光标位于可滚动框架中时我尝试捕获 MouseWheel 事件 我设置了一个绑定 main window bind
  • LoadError:不兼容的库版本 - nokogiri

    当我尝试时遇到以下错误 run rake db migrate Log rake aborted LoadError incompatible library version home ubuntu rvm gems ruby 2 3 1
  • 处理 Cassandra 时间戳

    最近我开始研究 cassandra 并且在使用 cql 和 Java 处理 cassandra 时间戳时遇到一些问题 下面是我的示例 cassandra 表架构 CREATE TABLE emp empid int create date
  • 防止 Adblock 阻止跟踪像素

    我目前在一个提供横幅的平台工作 但这些并不是您在每个网站上看到的那些烦人的横幅 它们是交互式横幅 仅当您单击它时才会展开 问题是 adblock 并没有阻止横幅本身 而是阻止了我注入横幅的跟踪像素 为什么我想解决这个问题 好吧 传递那条横幅
  • Clojure 中的自定义异常?

    我一直在尝试在 Clojure 中创建用户定义的异常 但遇到了各种各样的问题 我尝试了这里概述的方法 http en wikibooks org wiki Clojure Programming Concepts User Defined
  • Android 发布构建自动化

    我在一个文件夹中有十个 Android 项目 对于每个项目 我可以使用ant debug来建造它 所以编写一个简单的脚本来编译所有这些项目是没有问题的 我每天都使用 Hudson 来构建这些项目 而且效果很好 但现在我们的项目需要进入发布阶
  • 在 Visual Studio (2013) 中定义“CustomDictionary.xml”架构的正确方法?

    我正在使用自定义词典 CustomDictionary xml https learn microsoft com en us visualstudio code quality how to customize the code anal
  • 证书随机未正确创建

    我创建了一个自定义 httpclient 用于接收自定义信任存储 并将其用于它尝试访问的所有 ssl 站点 这是代码 public class MyHttpClient extends DefaultHttpClient private C