日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2023/12/10 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用SSL基礎(chǔ)架構(gòu):

我們有一個(gè)有效的客戶端/服務(wù)器設(shè)置,其中Android版本4.2和4.4的手機(jī)充當(dāng)客戶端,必須通過其自簽名SSL證書驗(yàn)證服務(wù)器.

問題:

只要設(shè)備在嘗試連接之前至少有一次互聯(lián)網(wǎng)訪問權(quán)限,服務(wù)器證書驗(yàn)證就會(huì)起作用.但是,如果執(zhí)行恢復(fù)出廠設(shè)置且設(shè)備直接連接到?jīng)]有Internet連接的專用網(wǎng)絡(luò),則證書驗(yàn)證將失敗.

重現(xiàn)行為:

>出廠重置手機(jī)

>重新啟動(dòng)而不選擇連接到具有Internet訪問權(quán)限的WiFi

>嘗試驗(yàn)證自簽名SSL證書 – >失敗

>連接到可上網(wǎng)的WiFi

>重新連接到原始專用網(wǎng)絡(luò)

>嘗試驗(yàn)證自簽名SSL證書 – >作品

從技術(shù)上講,設(shè)備不應(yīng)該需要Internet訪問來驗(yàn)證自簽名證書.在進(jìn)行任何SSL服務(wù)器驗(yàn)證之前,是否存在某種必須加載的黑名單?我可以阻止這種行為嗎?

創(chuàng)建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中出現(xiàn)異常失敗:

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

總結(jié)

以上是生活随笔為你收集整理的android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。