android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书

使用SSL基础架构:

我们有一个有效的客户端/服务器设置,其中Android版本4.2和4.4的手机充当客户端,必须通过其自签名SSL证书验证服务器.

问题:

只要设备在尝试连接之前至少有一次互联网访问权限,服务器证书验证就会起作用.但是,如果执行恢复出厂设置且设备直接连接到没有Internet连接的专用网络,则证书验证将失败.

重现行为:

>出厂重置手机

>重新启动而不选择连接到具有Internet访问权限的WiFi

>尝试验证自签名SSL证书 – >失败

>连接到可上网的WiFi

>重新连接到原始专用网络

>尝试验证自签名SSL证书 – >作品

从技术上讲,设备不应该需要Internet访问来验证自签名证书.在进行任何SSL服务器验证之前,是否存在某种必须加载的黑名单?我可以阻止这种行为吗?

创建SSL上下文:

//Using a client certificate

String password = "clientpass";

KeyStore keyStore = KeyStore.getInstance("PKCS12");

InputStream is = context.getResources().openRawResource(R.raw.client);

keyStore.load(is,password.tocharArray());

is.close();

KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");

kmf.init(keyStore,password.tocharArray());

KeyManager[] keyManagers = kmf.getKeyManagers();

// Using self signed certificate

CertificateFactory cf = CertificateFactory.getInstance("X.509");

is = context.getResources().openRawResource(R.raw.cacert);

InputStream caInput = new BufferedInputStream(is);

Certificate ca;

try {

ca = cf.generateCertificate(caInput);

Log.i("CA","ca=" + ((X509Certificate) ca).getSubjectDN());

} finally {

caInput.close();

}

// Create a KeyStore containing our trusted CAs

KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

trustStore.load(null);

trustStore.setCertificateEntry("ca",ca);

// Create a TrustManager that trusts the CAs in our KeyStore

TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");

tmf.init(trustStore);

TrustManager[] trustManagers = tmf.getTrustManagers();

// Create an SSLContext that uses our Trustmanager and Keymanager

SSLContext sslcontext = SSLContext.getInstance("TLS");

sslcontext.init(keyManagers,trustManagers,null);

//create a socket to connect with the server

SSLSocketFactory socketFactory = sslContext.getSocketFactory();

SSLSocket socket = (SSLSocket) socketFactory.createSocket(serverAddr,port);

socket.setUseClientMode(true);

socket.addHandshakeCompletedListener(this);

socket.startHandshake();

在startHandshake中出现异常失败:

javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net缓存(二)

ASP.NET页面局部缓存 有时缓存整个页面是不现实的,因为页的某些部分可能在每次请求时都需要变化。在这些情况下,只能缓存页的一部分。顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求,而页面其他部分内容则为…

学习C# - Hello,World!

第一天学C#,开始学着写一些学习笔记,看了一下传智播客的视频,按照传智播客的教学顺序,开始学习。 class Program{static void Main(string[] args){Console.WriteLine("Hello World!");//自动添加回车换行Console.Write("Hell…

android获取button宽度,android – 如何获得Button的高度和宽度

我创建了一系列按钮.现在我想找到按钮的高度和宽度,为此我使用了getWidth()和getHeight().但问题是它总是返回0.为什么会发生这种情况?我发送了我的代码,请检查是否有任何问题.int x,y;LinearLayout layoutVertical (LinearLayout) findViewById(R.id.liVLayout);L…

java执行sql列名无效_嵌套异常是java.sql.SQLException:无效的列名ORACLE

我尝试在Java中使用JdbcTemplate执行以下oracle查询:select RESOURCE_IDfrom REPRO_PRINTING_JOBwhere (USER_ID? and PRINTING_CENTER_ID?)group by RESOURCE_IDunion allselect RESOURCE_IDfrom REPRO_PRINTING_JOB_OLDwhere (USER_ID? and PRINTING_CENTER_ID…

(七)Maven使用的最佳实践

这里说一下在使用Maven过程中不是必须的,但十分有用的几个实践,关键时刻或许能解决您的问题。 1.设置MAVEN_OPTS环境变量 通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx512m,因为Java默认的最大可用内存往往不能够满足Maven运行的需要&#xff…

android beam传输速率,无线网络的速率为何不能达到最大值

1、无线速率可以达到最大值,只是发送速率和传输流量是两个概念,通俗点讲,无线的发送速率是把信号以指定速率发出去(信号好的时候以高速率发,信号差的时候以低速率发)。传输流量是指单位时间内传输的数据量,大部分用户关…

【SMTP 补录 Apache服务】

【补录,续】1.【配置空壳邮件接受】【mta】【前置:在/etc/named.rfc1912.zones 添加一个可以接受邮件的域hxl.org(与你数据库中写的向对应),这个域的所在ip就是你机子的,因为要从你的机子转发】 【配置该机的vim/etc/…

image打开rgb16 qt_QT中显示图像数据

一般图像数据都是以RGBRGBRGB……字节流的方式(解码完成后的原始图像流),我说成字节流,那就表明R,G,B的值各占一个字节,在编程时表示的就是unsigned char * data。我们先来看一下QT中的QImage对象。在加载data数据前&a…

开启chrome默认支持ipv6

在快捷方式后面的属性后面输入 --enable-ipv6 以下为转载: [转载]chrome开启或关闭IPV6方法 (2012-05-27 17:54:06) 转载▼ 标签: 转载 分类: 技术 原文地址:chrome开启或关闭IPV6方法作者:余鲲涛 chrome和firefox都是…

Nginx安装部署

转:http://www.cnblogs.com/zhuhongbao/archive/2013/06/04/3118061.html Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开…

android ble 连续读写,Android BLE实现对蓝牙的读写

【实例简介】通过修改官方的demo实现对蓝牙的读写操作,详细http://blog.csdn.net/chenfengdejuanlian/article/details/45787123【实例截图】【核心代码】BluetoothLe_demo0└── BluetoothLe_demo0├── AndroidManifest.xml├── bin│ ├── AndroidManife…

一分钟经理人

原创2016-12-0858沈剑 零、缘起近期公司再做管理者培训,偶老大推荐了一本薄薄的《一分钟经理人》,斯宾塞.约翰逊,花了1小时读完有感,沉淀一篇阅读笔记,故有此文。一、前言常见经理人有两类:(1&a…

python写机器人程序_用Python写的一个多线程机器人聊天程序

本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows)。后来发现实现起来特别麻烦, 就想到python。听说这家伙在什么地方都能发挥作用。所以想用python来做通讯模块。。。所以主要学习pythonn的多线程和tcp连接。但是没有用过python, 所有在学习…

[转] 前端中的MVC

MVC是一种设计模式,它将应用划分为3个部分:数据(模型)、展现层(视图)和用户交互(控制器)。其中: M - MODEL(模型) V - VIEW(视图&…

ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗

iqoo neo3在不高的价格上还保证了自己的品质,有很高的性能,很不错的屏幕。那么这款手机可以支持无线充电吗?小编为大家介绍关于iqoo neo3的充电方面。1.iqoo neo3可以支持无线充电吗iQOO Neo3 配备了 44W 超级闪充,属于小刀&#…

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行…

u2020 华为_华为5G网管U2020常用MML命令(很实用)

激活小区ACT NRCELL:;ACT NRDUCELL:;去激活小区DEA NRCELL:;DEA NRDUCELL:;查询小区静态信息LST NRCELL:;LST NRDUCELL:;查询小区动态信息DSP NRCELL:;DSP NRDUCELL:;修改帧偏置MOD GNODEBPARAM:FRAMEOFFSET70728;修改子帧配比、时隙结构MOD NRDUCELL:NRDUCELLID0,DUPLEXMODECE…

Struts2中过滤器,拦截器,监听器他们之间有什么区别?

1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。4、拦截器可以访问Action上下文、值栈里的对象…

pdf在html中加载不出来,在网页中打开显示PDF

在这里呢,本站仅为大家讲解在网页中显示PDF文件的简单方法,注意,是简单方法,同时,本站已验证过如下的相关代码,测试已通过。当然,有的朋友可能会问,是否能达到像百度文库那样在网页中…

hikaril连接sql2000_hikari连接池解析(版本:HikariCP-2.5.1.jar)

maxLifetime参数maxLifetime参数必须小于数据库的time_wait,默认是1800000,即30分钟。如果设置为0,表示存活时间无限大。如果不等于0且小于30秒则会被重置回30分钟。HikariConfig类中有该参数的校验规则。HikariPool类中,当我们初始化连接池的…