Volley SSL - 主机名未验证

2023-12-11

我正在开发一个 Android 应用程序,我需要访问 HTTPS 地址。我正在使用 Volley 请求我的数据,但现在我收到此错误com.android.volley.NoConnectionError: java.io.IOException: Hostname '<address>' was not verified

为了获得 SSL 工厂,我这样做:

private static SSLSocketFactory getSocketFactory() {
    SSLSocketFactory socketFactory = null;


    try {
        final CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        final BufferedInputStream bis = new BufferedInputStream(sContext.getResources().openRawResource(R.raw.cert)) ;

        Certificate certificate;
        try {
            certificate = certificateFactory.generateCertificate(bis);
        } finally {
            bis.close();
        }

        final String keyStoreType = KeyStore.getDefaultType();
        final KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", certificate);

        final String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);
        final SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, tmf.getTrustManagers(), null);
        socketFactory = sslContext.getSocketFactory();
    } catch (Exception e) {
        Log.w(TAG, Log.getStackTraceString(e));
    }
    return socketFactory;
}

队列初始化:

final HttpStack stack = new HurlStack(null, getSocketFactory());
final Cache cache = new NoCache();
final Network network = new BasicNetwork(stack);
sRequestQueue = new RequestQueue(cache, network);
sRequestQueue.start();

这是堆栈跟踪:

    com.android.volley.NoConnectionError: java.io.IOException: Hostname 'url' was not verified
09-04 11:15:33.198   W/System.err﹕ at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:151)
09-04 11:15:33.198   W/System.err﹕ at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
09-04 11:15:33.198   W/System.err﹕ Caused by: java.io.IOException: Hostname 'hml.services.vivara.com.br' was not verified
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.Connection.upgradeToTls(Connection.java:201)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.Connection.connect(Connection.java:151)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:208)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
09-04 11:15:33.198   W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
09-04 11:15:33.198   W/System.err﹕ at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:240)
09-04 11:15:33.198   W/System.err﹕ at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:210)
09-04 11:15:33.198   W/System.err﹕ at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:106)
09-04 11:15:33.198   W/System.err﹕ at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)

我搜索了该错误,但没有找到适合我的情况的任何内容。谁能帮我?


假设您的服务器应用程序托管在具有服务器证书的服务器计算机内,其中"Issued to" is "localhost", 例如。然后,在 verify 方法中你可以验证"localhost".

HostnameVerifier hostnameVerifier = new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        HostnameVerifier hv =
            HttpsURLConnection.getDefaultHostnameVerifier();
        return hv.verify("localhost", session);
    }
};

您可以通过以下链接阅读更多内容:

  1. 主机名验证器

    如果 URL 的主机名与对等方的标识主机名不匹配,则在握手期间使用它。

  2. 主机名验证的常见问题

    发生这种情况的原因之一是服务器配置错误。这 服务器配置了没有主题的证书 或与您所在服务器匹配的主题备用名称字段 试图达到...

然后,在你的Volley应用程序,您可以创建一个HurlStack, 压倒一切createConnection其中setHostnameVerifier为了httpsURLConnection.

希望这可以帮助!

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

Volley SSL - 主机名未验证 的相关文章

随机推荐

  • 如何在 python numpy 中并行化求和计算?

    我正在尝试计算总和 但在并行化代码时遇到困难 我尝试并行化的计算有点复杂 它同时使用 numpy 数组和 scipy 稀疏矩阵 它输出一个 numpy 数组 我想对大约 1000 次计算的输出数组求和 理想情况下 我会保留所有迭代的运行总和
  • 为什么我有时通过列表模型更新内容后会得到空白的 JList?

    我有一个反复出现的问题 我有一个 JList 我希望用新内容更新它 我正在使用 DefaultListModel 它提供了向列表添加新内容的方法 但在使用这些方法时 我发现某些调用会导致完全空白的 JList 更新是否有效似乎是随机的 与发
  • 用户的 Microsoft Graph Api $count 响应不一致

    我试图通过我的 B2C AAD 租户通过 Microsoft Graph API 获取用户总数 但响应似乎要么出错 要么忽略 odata count财产 网上的反馈也是褒贬不一 有人说 count即使官方文档说仍然不受支持 count支持
  • 无法连接到 GitHub.com 进行克隆

    我正在尝试克隆Angular phonecat git 存储库 但是当我在 Git Bash 中输入命令时收到以下消息 git clone git github com angular angular phonecat git Clonin
  • 如何将 WSO2 API Manager (AM) 1.10.0 与 PingFederate SAML 2.0 集成?

    如何将 WSO2 am 1 10 0 与 PingFederate SAML 2 0 集成 有什么指示吗 在 WSO2 网站上 我只看到了有关如何在 WSO2 产品中设置 SSO 的文档 https docs wso2 com displa
  • EditText 的 onFocusChange 中的 setSelection

    通常 当单击视图时 文本光标会设置在您单击的位置附近 我尝试将其始终设置为末尾 超过最后一个字符 但除非操作被延迟 否则它不会执行任何操作 下列 new OnFocusChangeListener Override public void
  • Electron-builder 没有捆绑 python 文件

    这是我的目录结构renderer js包含在index html python 脚本visitor py and download py被称为来自renderer js via 蟒蛇壳 一旦我捆绑 它就无法找到Python脚本 index
  • sql server 授予、撤销用户权限

    我编写了一个简单的 C 代码 用于连接到 sql server 数据库并执行查询 cmd new SqlCommand txtQuery Text ToString Trim con cmd ExecuteNonQuery 在我的数据库中
  • GitHub 如何更改 URL 但不重新加载? [复制]

    这个问题在这里已经有答案了 嘿 我注意到 当浏览 GitHub 存储库时 它使用 AJAX 来加载每个文件夹 文件 我明白这一切 我只是想知道他们是如何更改 URL 的 你能用 JavaScript 获取和设置 URL 吗 如果是这样 它对
  • 动画高度从下到上而不是从上到下

    如何实现反向高度动画 我怎样才能让它从元素的底部开始动画并向上移动到元素的顶部 而不是从顶部开始并向下移动的典型动画 该事件由以下条件触发a link 1 动画发生在div line 1 这是我的代码 它似乎不起作用 HTML div di
  • 使用两个域相同的数据库和不同的 WordPress 主题

    我想使用相同的数据库 内容 用户 评论 元 类别等 在我的子目录中安装另一个wordpress 我实际上想创建我的网站的移动版本 但我不想使用任何移动检测脚本或 css3 媒体查询 只是想创建我的新主题 适用于移动版本 例如 主域还有子域
  • 将数组作为数组而不是 PHP 中的 JSON 传递给 javascript

    首先 这不是重复的问题 我已经研究过一些类似的问题 大部分答案就是我现在正在使用的 这是问题设置 在 PHP 端 array array name gt a data gt array 0 gt 15 0 25 gt 18 0 35 gt
  • R 中选定列的行平均值

    让我们用著名的例子来说明这个问题iris数据集 我需要按行应用选定的函数 但仅在选定的列上应用 示例如下 library tidyverse iris gt mutate at funs scale vars vars c Species
  • 从 SQLite 数据库获取纬度和经度以在 Android MapOverlay 中使用

    如果我将一堆位置的纬度和经度存储在 SQLite 数据库中 我将如何检索这些值并将它们分别放入 OverlayItem 类中以便在 Google 的地图代码中使用 数据库名称 database 表名 place 字段位于place Tabl
  • 显示对象引用的值

    在 C 中 显示对象指针的实际值相当简单 例如 void p new CSomething cout lt lt p 有没有办法在 NET 中做这样的事情 这样做的价值只能是教育性的 例如出于演示目的 例如向学生展示一个值 而不是仅仅比较参
  • 将overlay2存储驱动程序与overlay文件系统结合使用

    Goal 我在 Live CD 中运行 docker 并且我想缓存 docker 构建的结果 主要是为了当我重新启动到此 Live CD 时使用 我的想法是建立一个overlayfs in var lib docker 所以 我有以下内容
  • SWR 挂钩不反映数据库更改

    该组件用于计算部署在 AWS Lambda 上的 Next js 应用程序中页面级别的视图数 function ViewsCounter slug slug string const data useSWR api views slug f
  • PHP摩尔斯电码转换器

    我正在用 PHP 编写一个基本的莫尔斯电码转换器 它可以接受一个字符串并将其转换为莫尔斯电码 它使用关联数组 foreach 循环和for 循环 它可以工作 除了由于某种原因它在每个转换后的字符后输出与 0 等效的莫尔斯电码 我不知道0是从
  • 在 mail.body 中查找“回车符”

    我有这样的邮件 Hello 请注意 我们在 16 点 15 分 已采取的行动 重建等 真挚地 Mr 每封邮件中的操作都会发生变化 我想要的是将操作插入到我的 Excel 中 问题是我不知道如何获得 回车符 我不知道这是否是正确的名称 这就是
  • Volley SSL - 主机名未验证

    我正在开发一个 Android 应用程序 我需要访问 HTTPS 地址 我正在使用 Volley 请求我的数据 但现在我收到此错误com android volley NoConnectionError java io IOExceptio