OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证

2024-05-08

我几天来一直在努力让它发挥作用。我正在尝试通过以下方式连接到我的服务器https带有自签名证书。我认为现在没有任何页面或示例是我未读过的。

我做了什么:

  1. 按照本教程创建了 bks 密钥库:http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

It uses openssl s_client -connect domain.com:443从服务器获取证书。然后使用 bouncy castle 创建一个 bks 密钥库。

  1. 从原始文件夹中读取创建的密钥库,将其添加到 sslfactory,然后添加到 OkHttpClient。像这样:

    public ApiService() {
        mClient = new OkHttpClient();
        mClient.setConnectTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS);
        mClient.setReadTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS);
        mClient.setCache(getCache());
        mClient.setCertificatePinner(getPinnedCerts());
        mClient.setSslSocketFactory(getSSL());
    }
    
    protected SSLSocketFactory getSSL() {
        try {
            KeyStore trusted = KeyStore.getInstance("BKS");
            InputStream in = Beadict.getAppContext().getResources().openRawResource(R.raw.mytruststore);
            trusted.load(in, "pwd".toCharArray());
            SSLContext sslContext = SSLContext.getInstance("TLS");
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(trusted);
            sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
            return sslContext.getSocketFactory();
        } catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public CertificatePinner getPinnedCerts() {
        return new CertificatePinner.Builder()
                .add("domain.com", "sha1/theSha=")
                .build();
    }
    
  2. 由于某种原因,这总是会产生一个SSLPeerUnverifiedException有或没有密钥库。以及有或没有CertificatePinner.

    javax.net.ssl.SSLPeerUnverifiedException: Hostname domain.com not verified: 0         
     W/System.err﹕ certificate: sha1/theSha=
     W/System.err﹕ DN: 1.2.840.113549.1.9.1=#1610696e666f40626561646963742e636f6d,CN=http://domain.com,OU=development,O=domain,L=Valencia,ST=Valencia,C=ES
     W/System.err﹕ subjectAltNames: []
     W/System.err﹕ at com.squareup.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:124)
     W/System.err﹕ at com.squareup.okhttp.Connection.connect(Connection.java:143)
     W/System.err﹕ at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:185)
     W/System.err﹕ at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
     W/System.err﹕ at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)
     W/System.err﹕ at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
     W/System.err﹕ at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
     W/System.err﹕ at com.squareup.okhttp.Call.getResponse(Call.java:273)
     W/System.err﹕ at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:230)
     W/System.err﹕ at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:201)
     W/System.err﹕ at com.squareup.okhttp.Call.execute(Call.java:81)
     ...
    

我究竟做错了什么?


我遇到了同样的问题,但是我需要我的应用程序在多个临时环境中工作,所有这些环境都有自签名证书。更糟糕的是,他们可以即时更改这些证书。

为了解决这个问题,当仅连接到登台时,我添加了一个信任所有证书的 SSLSocketFactory。这修复了 java 错误,但是它给我留下了此票证中注明的 okhttp 异常。

为了避免此错误,我需要向 okHttpClient 添加一项自定义设置。这为我解决了错误。

okHttpClient.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证 的相关文章

  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • Android 启动器快捷方式

    我制作了一个简单的打卡 打卡时钟应用程序 我想向用户添加在主屏幕上创建快捷方式的选项 该快捷方式将切换应用程序的状态 超时 超时 但我根本不希望此快捷方式在屏幕上打开应用程序 这是我的 setupShortcut private void
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Android相机意图:如何获取全尺寸照片?

    我正在使用意图来启动相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE getParent startActivityForR
  • Android Studio:无法启动守护进程

    当我尝试在 Android Studio 中导入 gradle 项目时 遇到以下错误 Unable to start the daemon process This problem might be caused by incorrect
  • 材质设计图标颜色

    应该是哪种颜色 暗 材质图标 在官方文档上 https www google com design spec style icons html icons system icons https www google com design s
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 下载后从谷歌照片库检索图像

    我正在发起从图库中获取照片的意图 当我在图库中使用 Nexus 谷歌照片应用程序时 一切正常 但如果图像不在手机上 在 Google Photos 在线服务上 它会为我下载 选择图像后 我将图像发送到另一个活动进行裁剪 但在下载的情况下 发
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • Ktor 如何处理空响应

    我使用 Ktor 和这样的线路myentity client get url 从 API 响应获取并反序列化我的实体 当 API 返回某些内容时它工作正常 但是一旦 API 没有任何可返回的内容并发送 HTTP 204 响应 它就会失败并显
  • 树结构的序列化/反序列化

    我试图找出保存 序列化 并稍后打开 反序列化 树结构的最佳方法 我的结构由具有不同属性的各种对象类型组成 但每个对象类型都继承自基本抽象 Node 类 每个节点都有唯一的 ID GUID 并且有一个 AddSuperNode Node nd
  • 如何对其中包含自定义对象的 NSMutableArray 进行排序?

    我想做的事情看起来很简单 但我在网上找不到任何答案 我有一个NSMutableArray对象 假设它们是 Person 对象 我想排序NSMutableArray通过 Person birthDate 这是一个NSDate 我认为这与这个方
  • 如何对 git 子模块使用相同的协议?

    在 git 存储库 R 中 我有一个使用以下命令初始化的子模块 git submodule add git mygitserver 现在用户刚刚使用克隆 Rhttps并在运行时出现错误 git submodule init git subm
  • 无法加载文件或程序集“Microsoft.IdentityModel.Tokens,版本=5.2.0.0”

    我正在尝试使用 VS 2015 将 OWIN JWT 添加到 webapi 项目中 参考显示Microsoft Owin Security Jwt Version 4 0 0 0 and Microsoft IdentityModel To
  • 如何根据代理请求的属性切换 mitmproxy 模式

    我在上游模式下运行 mitmproxy 在我的脚本中 我正在检查标题 X Direct 这表明该请求应该not发送到上游代理 而不是直接发送到服务器 我想出了如何使用以下命令在每个请求的基础上修改代理模式next layer hook de
  • 带有 DialogFragment 的上下文操作栏

    我一直在尝试实现一个上下文操作栏和一个对话框片段 类似于android中的下载小部件 我尝试过设置android windowActionModeOverlay主题要真实 但这似乎不起作用 有什么办法我可以实现它吗 您在屏幕截图中看到的下载
  • 无法在 MySQL 中运行查询语法错误意外

    我正在运行工作台 5 2 47 我写了一个很长的程序 用于基本数据检查 如果数据库中不存在记录 则将插入该记录 该过程保存时没有任何问题 但当我尝试运行它时 MySQL 5 5 抛出错误 它很长 里面有很多公司敏感数据 或者我会把它发布在这
  • 'SQLSTATE[HY093]:参数数量无效:绑定变量的数量与令牌数量不匹配'[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我收到 SQLSTATE HY093 的错误 参数编号无效 绑定变量的数量与标记的数量不匹配 if isset POST cada
  • 在 Postman 中的后续请求中使用身份验证令牌

    我的应用程序 API 需要通过身份验证令牌进行身份验证 简而言之 我们向 authentication端点 它使用包含令牌的 JSON 对象进行响应 例如 token xxxxxxxxxxxxxxxxxxxxxx 我们应用程序中的每个其他
  • JSF 托管 Bean 命名约定

    这些天我曾经使用 JSF 但有一个 约定 我不确定是否应该使用 在使用托管 bean 时 人们通常将其命名为XxxxxManagedBean其中前缀可以是与您的业务相关的任何名称 你也这样工作过吗 特别是 尽管搜索很容易 但我不太喜欢 您正
  • 在闪亮的应用程序和多个页面中进行身份验证

    在我正在开发的系统中 我有 3 个不同的参与者 用户 管理员 支持团队 使用 Shiny App 我想知道如何向这三个参与者进行身份验证 每个参与者只能访问他们的页面 我发现使用闪亮的服务器专业版可以实现这一点 但它不是免费的 有什么方法可
  • Python:多重分配与单独分配速度

    我一直在寻求从我的代码中挤出更多的性能 最近 在浏览时这个 Python 维基页面 https wiki python org moin PythonSpeed 我发现了这个说法 多重分配比单独分配慢 例如 x y a b 比 x a y
  • AttributeError:“NoneType”对象没有属性“astype”

    我在复现ESRGAN相关程序时遇到了如下问题 libpng 错误 读取错误 Traceback most recent call last File sda ZTL B codes train py line 173 in
  • 单表继承发现问题

    我有以下3个rails类 它们都存储在一张表中 使用rails的单表继承 class Template lt ActiveRecord Base class ThingTemplate lt Template class StockThin
  • 如何在没有拓扑的情况下将 Windows Media Foundation 与 UWP 结合使用

    我一直在阅读 Polinger 的书 开发 Microsoft Media Foundation 应用程序 以便了解 Hololens 的 Microsoft 示例 MixedRemoteViewCompositor 文本的一个关键概念是媒
  • 解析 HTTP 标头值:引用、RFC 5987、MIME 等

    让我困惑的是 HTTP 标头的解码values 示例标头 Some Header quoted string utf 8 en Weirdness 罐头value s被引用 a 的编码怎么样 本身 是 有效的引号字符 分号有什么意义 HTT
  • React Native + Jest EMFILE:打开文件太多错误

    我正在尝试运行 Jest 测试 但收到以下错误 读取文件时出错 Users mike dev react TestTest node modules react native node modules yeoman environment
  • Rails 3 ActiveAdmin。如何为关联记录设置默认排序顺序?

    我有一个发货模型和一个发票模型 发票属于装运 所以我添加了一个默认的发货排序顺序 如下所示 config sort order file number desc 但现在我想为发票添加相同的排序顺序 发货表是具有 file number 列的
  • OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证

    我几天来一直在努力让它发挥作用 我正在尝试通过以下方式连接到我的服务器https带有自签名证书 我认为现在没有任何页面或示例是我未读过的 我做了什么 按照本教程创建了 bks 密钥库 http blog crazybob org 2010