首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

okhttp - HTTP失败: javax.net.ssl.SSLPeerUnverifiedException:找不到签名证书:

OkHttp是一个开源的HTTP客户端库,由Square公司开发。它提供了简洁的API,用于发送HTTP请求、处理响应和与服务器进行通信。OkHttp支持HTTP/1.1和HTTP/2协议,并提供了连接池、请求重试、请求拦截器、缓存等功能,使得开发者能够更方便地进行网络通信。

在网络通信中,SSL(Secure Sockets Layer)用于在客户端和服务器之间建立安全的加密连接。SSL证书用于验证服务器的身份,并确保通信的机密性和完整性。当使用OkHttp进行HTTPS请求时,如果服务器的SSL证书无法验证或找不到签名证书,就会抛出javax.net.ssl.SSLPeerUnverifiedException异常。

解决这个问题的方法是通过配置信任的证书来验证服务器的身份。可以使用以下步骤来解决该异常:

  1. 获取服务器的证书:可以通过浏览器访问服务器,并导出证书到本地。或者使用命令行工具(如openssl)获取证书。
  2. 创建一个自定义的TrustManager:TrustManager用于验证服务器的证书。可以实现X509TrustManager接口,并在checkServerTrusted方法中自定义验证逻辑。
  3. 创建一个SSLContext:SSLContext用于创建安全的Socket连接。可以使用SSLContext.getInstance("TLS")获取SSLContext实例,并使用自定义的TrustManager初始化。
  4. 配置OkHttp客户端:通过调用OkHttpClient.Builder的sslSocketFactory方法,将自定义的SSLContext设置给OkHttpClient。

下面是一个示例代码,演示了如何解决OkHttp中的SSLPeerUnverifiedException异常:

代码语言:txt
复制
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class OkHttpExample {
    public static void main(String[] args) throws Exception {
        // 创建一个自定义的TrustManager
        TrustManager[] trustAllCerts = new TrustManager[] {
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    }

                    @Override
                    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        // 自定义验证逻辑,可以在这里实现证书的验证
                    }

                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                }
        };

        // 创建一个SSLContext
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

        // 配置OkHttp客户端
        OkHttpClient client = new OkHttpClient.Builder()
                .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
                .build();

        // 发送HTTP请求
        Request request = new Request.Builder()
                .url("https://example.com")
                .build();
        Response response = client.newCall(request).execute();

        // 处理响应
        System.out.println(response.body().string());
    }
}

在上述示例代码中,我们创建了一个自定义的TrustManager,实现了对服务器证书的自定义验证逻辑。然后使用该TrustManager创建了一个SSLContext,并将其配置给OkHttpClient。最后,我们使用OkHttpClient发送了一个HTTPS请求,并处理了响应。

腾讯云提供了多个与网络通信和安全相关的产品,例如SSL证书、Web应用防火墙(WAF)、DDoS防护等。您可以根据具体需求选择适合的产品来增强网络通信的安全性和稳定性。具体产品介绍和相关链接如下:

  1. SSL证书:提供了多种类型的SSL证书,用于保护网站和应用程序的安全通信。详情请参考SSL证书产品页
  2. Web应用防火墙(WAF):用于保护网站和应用程序免受常见的Web攻击,如SQL注入、跨站脚本等。详情请参考Web应用防火墙(WAF)产品页
  3. DDoS防护:提供了多层次的DDoS攻击防护,保护您的业务免受大流量和恶意攻击。详情请参考DDoS防护产品页

请注意,以上只是腾讯云提供的一些相关产品,您可以根据具体需求选择适合的产品。同时,还可以参考腾讯云的文档和官方网站,了解更多关于云计算和网络安全的知识和产品信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战

1.1 https如何保证安全 HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。...key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密 csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名 crt是由证书颁发机构(CA)签名后的证书,...或者是开发者自签名证书,包含证书持有人的信息,持有的公钥,以及签署者的签名等信息 备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。...复制已签名的SSL证书和私钥到指定位置,并设置正确的文件权限 配置已签名的SSL证书(mycert.jks)的位置 配置将HTTP请求都重定向到HTTPS 5.1 将证书mycert.jks拷贝到conf...参考文献 OpenSSL下载安装 使用OpenSSL生成自签名SSL证书签名证书生成过程 Tomcat安装SSL证书

21.7K22
  • 忽略https域名校验不通过

    公司有一些标准的对外https服务,内部调用也需要走https的方式,但是可以用内部IP,这个时候就会遇到证书校验域名不通过的问题,需要忽略。...本文分别介绍curl,wget和okhttp中忽略域名校验的方法 curl 错误内容 curl: (51) Unable to communicate securely with peer: requested...wget 增加参数--no-check-certificate wget 'https://subdomain.example.com/goods.json' --no-check-certificate OkHttp...错误内容 javax.net.ssl.SSLPeerUnverifiedException: Hostname 10.0.0.100 not verified 忽略方式:自定义HostnameVerifier...hostnameVerifier((hostname, session) -> true) .build(); 参考 https://stackoverflow.com/questions/31917988/okhttp-javax-net-ssl-sslpeerunverifiedexception-hostname-domain-com-not-verifie

    9.1K50

    Android安卓进阶之——一文带你了解抓包和反抓包

    OkHttp 配置信任认证链 (声明:这种方法是全方面防御,在 Android7.0 以下设备也能起作用)** 步骤①:写一个 CertificatePinner 的配置 其中的 add方法两个参数。...搜索关键字,我们能得到这么一串报错 Subscriber onError() : javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning...news-at.zhihu.com」域名的认证 sha256 期望是 「sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=」 因为两者对应不上,所以请求失败...CertificatePinner部分 验证结果 按照 OkHttp 官方指导配置完后,使用 charles 抓包看看还能不能在 Android 7.0 以下系统抓到包。...验证结果,不能抓包,会出现一个报错: Subscriber onError() : javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning

    2.8K40

    【胖虎的逆向之路】Android自制Https证书实现双向认证

    即:证书 = 公钥 + 签名 +申请者和颁发者的信息。...客户端中因为在操作系统中就预置了 CA 的公钥,所以支持解密签名 2.证书生成 基本概念讲完之后,我们来实际操作一下证书的生成,博主这边主要使用到了open ssl~ 2.1 生成根证书(CA) 首先,...生成一个自签名的根证书作为根证书颁发机构(CA) 并生成根证书~ 使用 OpenSSL 工具来生成: openssl genrsa -out ca.key 2048 openssl req -x509...创建客户端密钥,生成证书签名请求(CSR)并签署客户端证书 openssl genrsa -out client.key 2048 openssl req -new -key client.key -...在证书到期之前,应当重新生成并部署新的证书 3.集成方式 3.1 使用 OkHttp 进行 HTTPS 请求 将客户端证书和私钥文件放置到 Android 项目中 将客户端的证书文件(client.crt

    97521

    如何让Apache HttpClient 支持SSL配置?

    ,下面的测试(使用 HTTPS URL)就会失败: /** * 2....','3','4','5','6'}); } catch (IOException e) { log.warn("【SSLHttpClientUtil】读取文件失败...生成SSL证书使用的是:Myssl image.png 8.2、对csr文件进行签名 下载之后,对csr文件进行签名 省略....... 8.3、执行相关命令 将三个文件(csr文件、key文件、签名文件...公钥和私钥一般都是用PEM方式保存,但是公钥文件还不足以成为证书,还需要CA的签名; CSR是证书签名请求,CA用自己的私钥文件签名之后生成CRT文件就是完整的证书了。...(7) *.csr 证书签名请求(Certificate sign request),包含证书持有人的信息,如国家,邮件,域名等。 (8) *.pfx 微软iis的实现。

    48610

    Android使用OkHttp请求自签名的https网站的示例

    但是一些公司又不想花一笔钱去CA申请证书,所以就采用自签名证书。...OkHttp默认是可以访问通过CA认证的HTTPS链接,例如百度首页也是https链接(https://www.baidu.com/)。...但是如果是你们公司自签名(即自己用keytool生成的证书,而不是采用通过CA认证的证书)的服务器,OkHttp是无法访问的,例如访问12306网站(https://kyfw.12306.cn/otn/...浏览器获得网站证书之后,开始验证证书的合法性,如果证书信任,则生成一串随机数字作为通讯过程中对称加密的秘钥。然后取出证书中的公钥,将这串数字以及HASH的结果进行加密,然后发给网站。...使用OKHTTP请求自签名的https服务器数据 以下我们使用12306网站为例 1. 首先去12306网站首页下载证书 http://www.12306.cn/ ? 2.

    1.6K41

    HTTP基础知识知多少

    2.SSL证书验证失败有以下三点原因: SSL证书不是由受信任的CA机构颁发的 证书过期 访问的网站域名与证书绑定的域名不一致 3.系统会默认安装一些根证书: DOS窗口里运行“certmgr.msc...2.证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名; 3.要获取HTTPS证书,请执行以下步骤: 步骤1:创建私钥和证书签名请求.../通配符证书 5.验证等级(查看区别) 域名验证型(DV)、企业验证型(OV)、增强验证型(EV) 自签名证书 ?...自签名证书 泛域名证书/通配符证书 ?...http://www.jianshu.com/p/f7972c30fc52 13.

    76230

    OkHttpOkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )

    OkHttp 系列文章目录 【OkHttpOkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置...代理 , ③ SOCKS 代理 ; @Nullable Proxy proxy; 协议集合 : 使用的协议版本 , 如 “http/1.1” , “http/2” , “spdy/3.1” 等 ; List..., 如果证书不收信任 , 会报异常 ; @Nullable SSLSocketFactory sslSocketFactory; 证书链清洁器 : 使用 HTTPS 协议时 , 使用 Java TSL...相关 API , 获取有效证书 , 清除不相关证书 ; @Nullable CertificateChainCleaner certificateChainCleaner; 主机名称校验器 : 使用...: 用于域名解析 ; Dns dns; 是否进行 SSL 重定向 : boolean followSslRedirects; 是否进行普通重定向 : boolean followRedirects; 失败后是否重连

    82720

    Wireshark抓包帮你理清HTTPS请求流程

    重新建联的时候会更换连接的路由,如果已经没有可选择路由的话,那么这个就真的失败了。 在 OkHttp 3.9.0 的默认配置中,连接超时的时间为 10000ms = 10s。...接入应用即时更新 OkHttp,就不用等待缓慢的系统更新了。 如果提供的所有密码套件服务端都不支持,OkHttp 有回退机制,退而求其次,选比较旧的套件。...用 CA 证书的公钥去验证中级证书的数字签名,再用中级证书的公钥去验证服务器证书的数字签名。任何一个环节验证失败,就可以认为证书不合法。 这就是整个证书链的认证过程: ?...然后是证书颁发机构的签名信息: 签名算法,algorithmIdentifier。这里得出使用的还是 SHA-256 摘要加 RSA 加密的签名算法。这个就是认证该证书的 CA 证书使用的签名算法。...仿冒手机端和真实服务端建立连接获取主密钥,然后又仿冒服务端和手机客户端建立 SSL 连接,修改服务端证书的 CA 和数字签名,这样 Charles 就可以解析到加密的 HTTP 内容了。

    7.4K23

    网络相关知识

    OKHTTP一般控制缓存有两种方式 1、在request里面去设置cacheControl()策略 2、在header里面去添加cache-control Android okhttp缓存真正正确的实现方式...数字证书 数字签名一般不单独使用,基本都是用在数字证书里实现 SSL 通信协议。 ? 第三步:请求网址后返回证书的公钥和数字证书,客户端验证数字证书的有效性,是ca的,怎么验证的?...在 Android 中使用 HTTPS 正常情况:直接使用 okhttp中就能验证自己的签名,就是为了让己的签名通过验证。...如果是ca机构的证书OKHTTP不需要配置直接就可以访问,如果是自定义的证书OKHTTP就不行了,但是可以信任指定证书或者所有证书来访问。...需要自⼰写证书验证过程的场景 用的是自签名证书(例如只用于内网的 https) 信息不全,缺乏中间证书机构(可能性不大) 手机操作系统较旧,没有安装最新加入的根证书 其他 get和post的区别 get

    62720

    微信小程序支付

    签名信息: 发起请求的商户(包括直连商户、服务商或渠道商)的商户号mchid 商户API证书序列号serial_no,用于声明所使用的证书 请求随机串nonce_str 时间戳timestamp 签名值...商户API证书序列号serial_no,这个有两种方式,一是从证书(p12)文件中获取,二是在后台查看:【API安全 > 申请API证书 > 点击“管理证书” > “证书序列号”】 下面就来重点说一下这个签名了...格式: HTTP请求方法\n URL\n 请求时间戳\n 请求随机串\n 请求报文主体\n HTTP请求方法,每个接口都不一样,比如下单接口是POST,查询接口是GET。...request.setParam(param); request.setMethod(Request.Method.POST); request.setUtil(Request.Util.OkHttp...request.setUrl(url); request.setMethod(Request.Method.GET); request.setUtil(Request.Util.OkHttp

    40620

    移动端防抓包实践

    如果重写的HostnameVerifier不对服务器的主机名进行验证,即验证失败时也继续与服务器建立通信链接,存在发生“中间人攻击”的风险。...okhttp配置的方式只能对使用该网络框架进行数据传输的接口生效,并不能对整个app生效。 破解:将手机进行root,然后将代理证书放置到系统证书列表内,就可以绕过代码或配置检查了。...如何设置证书校验 通过OkHttp的API方法 sslSocketFactory(sslSocketFactory,trustManager) 设置SSL证书校验。...破解:证书锁定破解比较复杂,比如老牌的JustTrustMe插件,通过hook各网络框架的证书校验方法,替换原有逻辑,使校验失效 4.8 Sign签名 先说一下背景和问题 http://api.test.com...导致解码失败

    1.8K10

    快手抓包问题分析

    表现就是使用常规的 HTTP 正向代理抓包工具(charles、mitmproxy、fiddler 之类)并且把自签名证书种到系统证书里后,数据依然能刷出来,也能抓到一些零星的报文,但是关键出数据的那些接口报文都没有...这样http流量就绕过我们配置的代理,自然抓不到包。 当前的现象是数据能刷出来,那就说明并不是证书信任相关的问题。接下来就需要验证它究竟是使用了什么样的传输方式,对症下药。...分析 环境部署 准备自签名CA证书 需要在 Linux 主机上使用 openssl 工具生成一波证书。当然,这一步可以忽略,直接使用mitmproxy生成的证书。...8000端口,并配合curl简单验证证书可用性 mitmproxy -p 8000 # 能正常访问没有SSL相关报错,就说明之前生成的自签名证书是OK的 curl -x localhost:8000.../4.x/okhttp/okhttp3/-ok-http-client/-builder/proxy/

    4.2K10

    从原理到实战,全面总结 Android HTTPS 抓包

    三要素分别是: 加密: 通过对称加密算法实现 认证: 通过数字签名实现(因为私钥只有 “合法的发送方” 持有,其他人伪造的数字签名无法通过验证) 报文完整性: 通过数字签名实现(因为数字签名中使用了消息摘要...如果一个 IP 包大小超过了 MTU,则会进行 IP 分片; Reliability 可靠性 / 丢包率: 指数据传输失败的概率; Stability 稳定性 / 抖动率: 指网络环境的稳定性,如果网络不稳定...5.4 Charles 修改 HTTP 请求 Charles 本身是一个代理服务器,可以拦截 HTTP 请求 / 响应进行修改后再放行。...6.2 OkHttp 拦截器 对于基于 OkHttp 实现网络请求的应用,可以通过拦截器监控应用内的网络数据,再通过通知栏、桌面小部件等入口查看抓取的数据。...DoraemonKit 也提供了网络监听的能力,其原理同样是基于 OkHttp 拦截器。

    2.2K10

    Android开发之OkHttpUtils的具体使用方法

    一、概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工具类中的方法也是剧增...ok,那么目前,该封装库志支持: 一般的get请求 一般的post请求 基于Http的文件上传 文件下载 上传下载的进度回调 加载图片 支持请求回调,直接返回对象、对象集合 支持session的保持 支持自签名网站...https的访问,提供方法设置下证书就行 支持取消某个请求 源码地址:https://github.com/hongyangAndroid/okhttp-utils 引入: Android Studio...下面简单看一下,全部的用法: (1)GET请求 String url = "http://www.csdn.net/"; OkHttpUtils .get() .url(url) .addParams...注意:如果https网站为权威机构颁发的证书,不需要以上设置。自签名证书才需要。

    4.6K41
    领券