使用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

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

  1. 解决android上WIFI提示“未检测到任何互联网连接,因此不会自动重新连接“

    问题描述: 在android5.1中出现如题提示,导致机器重启后不会链接WIFI. 分析代码: frameworks/opt/net/wifi/service/java/com/android/ser ...

  2. android ble sample,BleManager ble library 和周边 ble 连接 sample @codeKK Android开源站

    对 Ble 的封装,入口为 BleManager. 提供 Sample,可以连接周围 Ble 设备,支持发送数据与接收数据 使用方法 AbsBleManager manager = BleManage ...

  3. 服务器客户端证书,客户端如何验证HTTPS服务端证书信息

    通过一个例子说明客户端如何验证HTTPS服务端的证书信息. 类型浏览器如何验证WEB服务器的证书信息. 生成服务器端证书,以及CA证书 # generate ca certificate $ open ...

  4. 无法验证驱动程序的签名_无法验证应用?掉签名打不开应用?没越狱也能解决!...

    [ID君有话说] 什么叫掉签名?苹果手机的app都是在App Store 下载的,但还有很多APP由于不符合苹果商店规则,或不喜欢被商店的规则束缚,选择通过企业签名可以让免越狱用户直接安装的应用.但是 ...

  5. uniapp的APP证书、秘钥、应用包名、应用签名

    uni_appid: uniapp的id 秘钥: 生成APP证书时设置的密码 应用包名: uniapp打包时有个安卓包名既应用包名 应用签名: 常是微信开放平台中特定需要的,下载微信签名工具安装到手机 ...

  6. 使用java实现rfc3161,openssl验证用自签名证书签名的RFC3161时间戳

    我使用openssl从rfc 3161 timestampreq生成了一个rfc3161 timestampresp. 因此,我使用了自签名CA证书和自签名CA使用以下命令颁发的TSA证书: open ...

  7. app应用分发平台|苹果ios超级签名|APP封装打包|应用内测托管平台|iOS应用企业签名|Android应用上传内测-虾分发

    CDN分发平台-注册免审核-虾分发 https://xiafenfa.com/ app应用分发平台|苹果ios超级签名|APP封装打包|应用内测托管平台|iOS应用企业签名|Android应用上传内测 ...

  8. android:listview实现qq,微信好友列表(头像,昵称,个性签名)

    版权声明:本文为博主原创文章 http://blog.csdn.net/su20145104009 首先附上运行结果: 如果你没有学过listview请你先看一看基本知识.不想再说的那么细了 太多了. ...

  9. pki 证书验证机制_网络身份验证的PKI签名请求和证书颁发

    pki 证书验证机制 In a PKI (Public Key Infrastructure) system, proof of identity and ownership of key pairs ...

最新文章

  1. 2020第11届蓝桥杯省赛Python题目
  2. 揭示生命的奥秘——生物信息学
  3. c语言重定义不同的基类型_简述usb连接器输出类型定义和不同环境下的用法
  4. POJ 1696 Space Ant 极角排序(叉积的应用)
  5. 滴滴经验分享:SQLFlow如何让运营专家用上AI?
  6. 如何设置iMatrix平台中列表标签(gridjqGrid)实现动态列表
  7. 【英语学习】【Daily English】U13 Holiday L04 How was it?
  8. spring cloud简介之最好参考
  9. 格式notepad自动对齐_6.2 对齐设置
  10. STL模型文件修改软件magics 21.0的安装及使用
  11. 高级工具 zeppelin 整合hive教程
  12. 被裁员工公开呛声IBM人工智能,有双好鞋却不知怎么走路
  13. 文件查找以及文件内容查找
  14. 【人在运维囧途_08】淘宝内部大量使用的开源系统监控工具--Tsar
  15. 天津大学仁爱学院c语言期末考试题,天津大学仁爱学院2014-2015学年第1学期期末C语言复习...
  16. Oracle 11g安装过程中提示先决条件检查不通过的解决方法
  17. 使用Haproxy Exporter监控Sparkthrift存活率
  18. spss分析 sus量表高低分组
  19. 每周论文精读05-A2J:AnchortoJointRegressionNetwork for 3D ArticulatedPoseEstimation from a SingleDepthImage
  20. html 文字输出语音,网页上通过JS实现文本的语音朗读

热门文章

  1. 【小记】-005--纯CSS实现的小玩意儿
  2. 论一个程序员的自我修养-从一张图片说起
  3. IDEA下搜狗输入法输入中文时卡着不动的参考解决方法
  4. 新手算法学习之路----二叉树(二叉树最大路径和)
  5. DB2 数据库清表语句
  6. windows phone 8 使用页面传对象的方式 实现页面间的多值传递
  7. 大前端完整学习路线(完整版),路线完整版
  8. javascript --- 隐藏内部实现(最小暴露原则)
  9. php练习 租房子
  10. I.MX6 Linux Qt 启动流程跟踪