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

在Android中使用自签名证书时的SSLPeerUnverifiedException

是一个SSL握手过程中可能出现的异常。当Android应用程序尝试与使用自签名证书的服务器建立安全连接时,如果服务器的证书无法验证,就会抛出这个异常。

自签名证书是由服务器自行生成的证书,而不是由受信任的第三方机构颁发的。由于自签名证书没有经过第三方机构的验证,因此在默认情况下,Android系统会拒绝与使用自签名证书的服务器建立安全连接,以防止潜在的安全风险。

要解决SSLPeerUnverifiedException异常,可以采取以下步骤:

  1. 导入自签名证书:将自签名证书导入到Android应用程序的资源文件夹中,通常是"res/raw"文件夹。
  2. 创建SSL上下文:在应用程序代码中,使用导入的自签名证书创建一个自定义的SSL上下文。
  3. 配置SSL套接字工厂:使用自定义的SSL上下文创建一个自定义的SSL套接字工厂,并将其设置为应用程序的默认SSL套接字工厂。
  4. 建立安全连接:使用自定义的SSL套接字工厂与服务器建立安全连接。

以下是一个示例代码,演示如何在Android中使用自签名证书:

代码语言:txt
复制
try {
    // 导入自签名证书
    InputStream inputStream = getResources().openRawResource(R.raw.self_signed_certificate);
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);

    // 创建SSL上下文
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(null, null);
    keyStore.setCertificateEntry("self_signed_certificate", certificate);
    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(keyStore);
    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(null, trustManagerFactory.getTrustManagers(), null);

    // 配置SSL套接字工厂
    SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);

    // 建立安全连接
    URL url = new URL("https://example.com");
    HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
    connection.connect();

    // 处理连接结果
    int responseCode = connection.getResponseCode();
    // ...

} catch (SSLPeerUnverifiedException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

在这个示例中,我们假设自签名证书的文件名为"self_signed_certificate.crt",并将其放置在"res/raw"文件夹中。在实际使用时,需要将文件名和路径替换为实际的自签名证书文件。

推荐的腾讯云相关产品:腾讯云SSL证书服务。腾讯云SSL证书服务提供了多种类型的SSL证书,包括DV SSL证书、OV SSL证书和EV SSL证书,可以满足不同安全需求的应用场景。您可以通过腾讯云SSL证书服务购买和管理SSL证书,确保应用程序与服务器之间的通信安全。

更多关于腾讯云SSL证书服务的信息,请访问:腾讯云SSL证书服务

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

相关·内容

nginx配置https转发到tomcat(使用签名证书

一、使用openSSL生成签名证书 1、生成RSA私钥 命令:openssl genrsa -des3 -out server.key 1024 说明:生成rsa私钥,des3算法,1024强度,server.key...其中Common Name,必须写域名,若是测试可以写localhost 3、生成签名证书 命令: openssl x509 -req -days 365 -in server.csr -signkey...html/8080;   index index.html index.php index.htm; } } 四、tomcat配置server.xml # 注意几个请求头和nginx虚拟主机配置应该是对应...remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/> 注意:签名...建议大家还是去申请一个正式证书 文章借鉴: OpenSSL生成签名证书:https://www.cnblogs.com/hnxxcxg/p/7610582.html nginx配置https:https

6.5K30

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

但是一些公司又不想花一笔钱去CA申请证书,所以就采用签名证书。...但是如果是你们公司签名(即自己用keytool生成证书,而不是采用通过CA认证证书)服务器,OkHttp是无法访问,例如访问12306网站(https://kyfw.12306.cn/otn/...HTTPS工作原理 HTTPS传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据密码信息。...证书里面包含了网站地址,加密公钥,以及证书颁发机构等信息。 浏览器获得网站证书之后,开始验证证书合法性,如果证书信任,则生成一串随机数字作为通讯过程对称加密秘钥。...使用OKHTTP请求签名https服务器数据 以下我们使用12306网站为例 1. 首先去12306网站首页下载证书 http://www.12306.cn/ ? 2.

1.6K41
  • Android应用程序使用代码签名证书重要性

    截至2022年8月,Android移动操作系统占据了70%市场份额。 另外,与其他操作系统不同,Android允许用户下载第三方应用程序。这就存在不安全风险。...所以,开发人员有责任确保他们Andriod应用程序代码安全,而实现代码安全性完美解决方案是使用代码签名证书。 图片 为什么Android应用需要代码签名证书?...Android、Windows等操作系统在运行未签名软件时会警告提示 Android系统,所有安装到系统Android应用程序都需要经过代码签名证书签名,此数字证书用于标识应用程序开发者身份,...由此,最终用户可以决定是否下载和使用安卓应用程序。此外,代码签名证书还可以证明此应用程序代码签名后未被篡改,确保代码完整有效。...开发者想要在竞争激烈安卓应用市场证明其程序真实可靠,可以使用代码签名证书标识安卓程序真实身份,消除系统“未知发布者”警告,向最终用户证明该应用程序来源可信企业。

    96290

    HTTPS调试签名证书错误ERR_CERT_COMMON_NAME_INVALID解决方法

    1、问题现象 使用签名证书后,chrome报错此服务器无法证实它就是 www.webrtc.cn 它安全证书没有指定主题备用名称。这可能是因为某项配置有误或某个攻击者拦截了您连接。...错误码是NET::ERR_CERT_COMMON_NAME_INVALID: 如下图所示: 2、问题原因 生成证书时候没有加上备用名称字段,目前浏览器校验证书都需要这个字段。...3、解决方法 生成证书时候需要添加上备用名称(subjectAltName)扩展字段。...使用openssl添加subjectAltName扩展: 创建一个文件ext.ini,填入以下内容: basicConstraints = CA:FALSE keyUsage = nonRepudiation...DNS.1 = *.dyxmq.cn DNS.2 = *.maqian.xin DNS.3 = *.maqian.io DNS.4 = *.maqian.co DNS.5 = *.maqian.cn DNS.x

    4.8K30

    如何使用CertVerify扫描文件不受信任或不安全代码签名证书

    关于CertVerify  CertVerify是一款功能强大代码签名证书安全扫描工具,该工具可以帮助广大研究人员扫描和检测可执行文件(exe、dll、sys)是否使用了不受信任证书进行签名,或者存在代码签名证书泄漏安全风险...使用受损或不受信任代码签名证书签名可执行文件可用于分发恶意软件和其他恶意软件。攻击者可以使用这些文件绕过安全控制,使其恶意软件从表面上看起来是合法。...而该工具主要目的旨在识别出那些使用了已泄露、被盗或非可信来源证书签名潜在恶意文件。  ...功能介绍  1、基于泄漏或不受信任证书列表实现文件检查功能; 2、支持扫描目标目录子目录; 3、支持定义扫描任务需要排除目录; 4、支持多进程扫描以加快作业执行速度; 5、提供了基于证书主题白名单...) 然后切换到项目目录使用pip3命令和项目提供requirements.txt文件安装该工具所需依赖组件: cd CertVerify pip3 install requirements.txt

    61140

    ProgressiveJpeg介绍与Android使用

    什么是ProgressiveJpeg 我们在网页浏览大图,如果图片够大,网速够慢,我们能够很清晰看到一个现象。图片是由模糊到清晰慢慢呈现。...imageMogr2/thumbnail/300x300/interlace/1 Android如何使用ProgressiveJpeg 目前,众多开源图片加载库,只有Fresco支持了ProgressiveJpeg...因为不论支不支持渐进式加载,一般解码器(如AndroidBitmapFactory)一定能够解码出最终完整Jpeg图片。 那么,为什么它们无法支持渐进式呢。...上面代码,我们将读到所有字节都写入了mBaos。所以,newScanOrImageEndFound();我们将mBaos数据拿出来做处理。...通过这种方法,我们就可以Android设备上也展现出渐进式加载效果。是不是很cooool。 但是,这个方法因为会不断地产生byte[]其实非常吃内存。实际使用,我们可以考虑限制渐进图片粒度。

    1.8K40

    HTTPS 原理浅析及其 Android 使用

    ;颁发者和使用者相同,自己为自己签名,叫签名证书; (4) 证书=公钥+申请者与颁发者信息+签名; 3.HTTPS协议原理 (1) HTTPS历史 HTTPS协议历史简介: (1) SSL协议第一个版本由...可能是购买CA证书比较新,Android系统还未信任,也可能是服务器使用签名证书(这个测试阶段经常遇到)。   ...解决此类问题常见做法是:指定HttpsURLConnection信任特定CA集合。本文第5部分代码实现模块,会详细讲解如何让Android应用信任签名证书集合或者跳过证书校验环节。...(4) Android上TLS版本兼容问题   之前接口联调过程,测试那边反馈过一个问题是Android 4.4以下系统出现HTTPS请求不成功而在4.4以上系统上却正常问题。...(1) 整体结构   不管是使用签名证书,还是采取客户端身份验证,核心都是创建一个自己KeyStore,然后使用这个KeyStore创建一个自定义SSLContext。整体类图如下: ?

    3.8K40

    如何让Apache HttpClient 支持SSL配置?

    SSL请求,后文将会介绍如何编写发送带证书HTTPS请求HttpClient工具类,以及个人如何在工作实践工具类使用。...如果不了解HttpClient使用,可以看这篇文章: HttpClient 指南[1]. 2、 SSLPeerUnverifiedException 如果没有 HttpClient 配置 SSL...生成SSL证书使用是:Myssl image.png 8.2、对csr文件进行签名 下载之后,对csr文件进行签名 省略....... 8.3、执行相关命令 将三个文件(csr文件、key文件、签名文件...所有的证书都符合为Public Key Infrastructure (PKI) 制定 ITU-T X509 国际标准。 Java代码,我们可以使用下面的代码进行X509证书生成。...公钥和私钥一般都是用PEM方式保存,但是公钥文件还不足以成为证书,还需要CA签名; CSR是证书签名请求,CA用自己私钥文件签名之后生成CRT文件就是完整证书了。

    48610

    Android StudioParcelable插件简单使用教程

    Android Studio,你可以很快速使用Parcelable插件进行实体类序列化实现,使用该插件后,你实体类可以快速实现Parcelable接口而不用写额外代码。...因为该插件会帮你快速生成必须提供方法,可以说是很高效率了。...首先需要下载该插件: File- Setting- Plugins里搜索框内输入内容:android parcelable code generator,然后自己下载好重启studio即可使用该插件了...序列化时选择需要属性: ? 最后是自动生成代码,也表示成功实现了Parcelable接口: ? 怎么样?是不是很高效就实现了Parcelable接口!...哦对了,使用该插件需要你先自己准备好实体类属性。 以上这篇Android StudioParcelable插件简单使用教程就是小编分享给大家全部内容了,希望能给大家一个参考。

    3.6K20

    1-SIII--JsonAndroid使用--Gson

    一开始Android,对我来说它是一个有规则个字符串。 当我深入JavaScript后,感觉它越来越有意思,当成一个对象来用,属性、方法都能往里塞。...当接触SpringBoot并上手后,Json又成了url访问后操作数据库返回数。 到MongoDb后,哪哪都是Json,然后总结:Json是一非常好用数据存储格式。...*/ private boolean isMan; /** * 主要技能 */ private List major; 2.使用JSONObject...XXXX-XX-XX"形式,解析可自动转换为Date格式 日期.png 三、Json与网络 Json最广泛用途是在网络传输数据,具有体积小,JavaScript原生支持主角光环 拿阿里号码归属地查询网站来说...tel=18715078974 返回内容就包括json,我们可以请求网络,获取数据,解析出来,本地显示。

    2.3K40

    监听者模式 - Java与Android使用

    为两个相互依赖调用类进行解耦。 便于进行模块化开发工作。不同模块开发者可以专注于自身代码。 监听者用来监听自已感兴趣事件,当收到自已感兴趣事件执行自定义操作。...某些数据变化时,其他类做出一些响应。处理数据(或者分发事件)类主动投送消息,感兴趣类主动“订阅”消息。 监听者模式Android中有大量运用,相信大家都不会感到陌生。...Android开发,Button控件点击事件就是监听者模式最常见例子。 当Button被点击,执行了 OnClickListener.onClick。...我们可以把复杂算法封装起来,客户端只需要传入数据,即可获得(监听到)结果。 很多场景中都使用了监听者模式。开发者也可能在不知不觉中就运用了这个模式。...Android使用监听器 最常见例子是给Button设置点击事件监听器。 类似上个例子,设计一个接口当做监听器。Android回调可以利用handler,控制调用线程。

    1.8K60

    Agora SDK Android使用(在线视频通话)

    一.集成 1.注册账号创建项目 其中最重要要数 App ID 了 2.下载Agora SDK 二、学会看示例代码(可跳过) 1.整体了解项目结构(1v1视频通信示例) 以前看一个Android...项目先看AndroidManifest.xml,我更喜欢先把文件夹内结构树打印出来 打印文件夹内结构树可详见:杂篇-从整理文件发起杂谈[-File-] |---app |---.gitignore...--README.md |---README.zh.md |---settings.gradle 2.查看最项目的settings.gradle和build.gradle(最外层) 如果你想导入AS查看...,可以看一下com.android.tools.build:gradle版本修改一下 ---->[settings.gradle]----------------看一下项目包含模块-------...R.string.agora_app_id), //传入APP ID mRtcEventHandler);//RTC事件处理器 } catch (Exception e) {//发生异常捕获异常

    1.5K40

    Agora SDK Android使用(在线视频通话)

    记得第一次接触网络是高二时候(2011年),那时候手机还是键盘式,貌似每月有100M流量 印象很深,当时用手机上网查了"GPRS流量"是什么意思?...高考之后(2012年)暑假,一个好友家里建了一个QQ号,起名"张风杰特烈"(后更名"张风捷特烈") 从此之后我手机基本和打电话,发短信无缘了。可以说是打开了新世界大门吧。...一年前还是个连流量都不知道是什么的人,却能在短时间内融入这个网络时代,也许就是年轻人优势吧 很快,QQ就支持视频通话了,那遥不可及梦如梦般降临,而我就这么幸运站在梦中 由于我专业需要使用很多软件...经历几次后,感觉也看淡了,都是些数据而已,也没必要去较真,也就不玩游戏了 4.真正踏入网络时代 作为一名使用者,我可以贪婪享受着网络一切便利,但我越来越感到,只是这样是不够 网络对我来说仅是一个黑盒...数据流动中加工,反馈,展现 通过前端、后端、移动端涉猎,基本明白了是怎么回事。

    1.5K10

    Android 程序打包及签名

    APK如果使用一个key签名,发布另一个key签名文件将无法安装或覆盖老版本,这样可以防止你已安装应用被恶意第三方覆盖或替换掉。     这样签名其实也是开发者身份标识。...交易抵赖等事情发生签名可以防止抵赖发生。 签名注意事项 所有的Android应用都必须有数字签名,没有不存在数字签名应用,包括模拟器上运行。...Android系统不会安装没有数字证书应用。 签名数字证书不需要权威机构来认证,是开发者自己产生数字证书,即所谓签名。...正式发布一个Android应用时,必须使用一个合适私钥生成数字证书来给程序签名,不能使用ADT插件或者ANT工具生成调试证书来发布。...数字证书都是有有效期Android只是应用程序安装时候才会检查证书有效期。如果程序已经安装在系统,即使证书过期也不会影响程序正常功能。

    88960

    Mybatis使用generatedKey插入数据返回增id始终为1,增id实际返回到原对象当中问题排查

    今天使用数据库时候,遇到一个场景,即在插入数据完成后需要返回此数据对应增主键id,但是使用MybatisgeneratedKey且确认各项配置均正确无误情况下,每次插入成功后,返回都是...1,而不是最新增Id。...终于凭借着一次Debugg发现问题,原来使用Mabatisinsert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey),返回值...int表示是插入操作受影响行数,而不是指增长id,那么返回增id到底去哪里了呢?...通过下面的Debugg我们知道增id返回到testGenKey原对象中去了。 举例示范配置 数据库示例表  generator配置文件 <?

    1.7K10

    Kotlin 委托属性Android开发几个使用场景!

    如你所见,委托属性并没有什么神奇。但是,它虽然简单,却非常有用,让我们来看一些 Android 开发例子。 你可以官方文档中了解更多关于委托属性内容。...newInstance方法,方法里面把参数传递给 Fragment arguments,以便可以onCreate获取。...所以让我们来写一个扩展函数用于往Bundle 存储某种类型值,类型不支持时候抛出异常。...我们把这个类型设为非空,并且不能读取抛出了异常,这让我们可以 Fragment 获取非空值,避免了空值检查。...总结 我们看来一些 Android 开发中使用 Kotlin 委托属性例子。当然了,你也可以用别的方式来使用它。 这篇文章目标是展示委托属性是多么强大,以及我们可以用它做什么。

    4.6K41

    一分钟了解:Android 数字签名

    Android 数字签名 Android系统,所有安装到系统应用程序都必有一个数字证书,此数字证书用于标识应用程序作者和在应用程序之间建立信任关系 Android系统要求每一个安装进系统应用程序都是经过数字证书签名...签名,需要考虑数字证书有效期: 数字证书有效期要包含程序预计生命周期,一旦数字证书失效,持有改数字证书程序将不能正常升级。...总结:Android数字签名包含以下几个要点: 所有的应用程序都必须有数字证书Android系统不会安装一个没有数字证书应用程序 Android程序包使用数字证书可以是签名,不需要一个权威数字证书机构签名认证...如果要正式发布一个Android ,必须使用一个合适私钥生成数字证书来给程序签名,而不能使用adt插件或者ant工具生成调试证书来发布。...数字证书都是有有效期Android只是应用程序安装时候才会检查证书有效期。如果程序已经安装在系统,即使证书过期也不会影响程序正常功能。

    45530
    领券