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.pswp.cn/news/260002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260002.shtml
英文地址,請注明出處:http://en.pswp.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類中,當我們初始化連接池的…