二、自簽名證書
什么是自簽名證書(self-signed certicates)?
自簽名證書就是沒(méi)有通過(guò)受信任的證書頒發(fā)機(jī)構(gòu), 自己給自己頒發(fā)的證書.
SSL 證書大致分三類:
- 由安卓認(rèn)可的證書頒發(fā)機(jī)構(gòu)CA(Certificate Authority)(如: VeriSign、DigiCert), 或這些機(jī)構(gòu)的下屬機(jī)構(gòu)頒發(fā)的證書.
- 沒(méi)有得到安卓認(rèn)可的證書頒發(fā)機(jī)構(gòu)頒發(fā)的證書.
- 自己頒發(fā)的證書, 分臨時(shí)性的(在開發(fā)階段使用)或在發(fā)布的產(chǎn)品中永久性使用的兩種.
而只有Android系統(tǒng)認(rèn)可的機(jī)構(gòu)辦法的證書,在使用過(guò)程中才不會(huì)出現(xiàn)安全提示。
為什么會(huì)有人使用自簽名的證書呢?
(重要的事重復(fù)三遍)免費(fèi),免費(fèi),免費(fèi),不用花費(fèi)一分錢,在開發(fā)階段寫的代碼, 測(cè)試跟發(fā)布的時(shí)候也可以用。
三、OkHttp3添加自簽名證書
- 如何使用自簽名證書?
1.獲取證書流有兩種方式:
- 將服務(wù)端提供的證書文件放到assets文件夾里面,然后獲取。(因?yàn)槭窃赼ssets文件下,所以會(huì)寫入到apk里面)
- 打開證書文件,將證書里面的內(nèi)容以字符串的形式通過(guò)流寫入。(不會(huì)寫入到apk中)
2.創(chuàng)建秘鑰,添加證書進(jìn)去
3.創(chuàng)建信任管理器,并把秘鑰初始化到信任管理器里
4.獲取SLL上下文,并把信任管理器初始化到SSL里
5.獲取socket工廠,設(shè)置到okhttpclient中
6.檢驗(yàn)主機(jī)名
if (UrlConsts.serverUrl.contains(“https://”)){
InputStream cerInputStream = null;
try {
//方式一:在assets中獲取證書
cerInputStream = context.getAssets().open(“ssl.cer”);
//方式二:把字符串通過(guò)流的形式獲取證書
// cerInputStream = new ByteArrayInputStream(cerText.getBytes(“UTF-8”));
//獲取socket工廠
SSLSocketFactory sslSocketFactory = SSLUtil.getSSLSocketFactory(cerInputStream);
//okhttp設(shè)置socket工廠
okHttpClientBuilder.sslSocketFactory(sslSocketFactory);
} catch (IOException e) {
e.printStackTrace();
}
}
//檢驗(yàn)主機(jī)名
okHttpClientBuilder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
public class SSLUtil {
/**
-
返回SSLSocketFactory
-
@param certificates 證書的輸入流
-
@return SSLSocketFactory
*/
public static SSLSocketFactory getSSLSocketFactory(InputStream… certificates) {
return getSSLSocketFactory(null,certificates);
}
/**
-
雙向認(rèn)證
-
@param keyManagers KeyManager[]
-
@param certificates 證書的輸入流
-
@return SSLSocketFactory
*/
public static SSLSocketFactory getSSLSocketFactory(KeyManager[] keyManagers, InputStream… certificates) {
try {
//獲取證書工廠
CertificateFactory certificateFactory = CertificateFactory.getInstance(“X.509”);
//創(chuàng)建秘鑰,添加證書進(jìn)去
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
int index = 0;
for (InputStream certificate : certificates) {
String certificateAlias = Integer.toString(index++);
keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));
try {
if (certificate != null) certificate.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//創(chuàng)建信任管理工廠
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
//初始化信任管理器
trustManagerFactory.init(keyStore);
//獲取SSL上下文對(duì)象
SSLContext sslContext = SSLContext.getInstance(“TLS”);
//初始化信任管理器
sslContext.init(keyManagers, trustManagerFactory.getTrustManagers(), new SecureRandom());
//獲取socket工廠
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
return socketFactory;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
測(cè)試運(yùn)行,完美解決。
2.信任所有證書(不建議使用)
服務(wù)端提供的證書文件,如果服務(wù)端更改了需要客戶端進(jìn)行相應(yīng)的更改,否則無(wú)法請(qǐng)求服務(wù)端數(shù)據(jù)。如果想不換證書可以繼續(xù)訪問(wèn),可以通過(guò)X509TrustManager信任所有的證書,以達(dá)到客戶端不換證書文件就能獲取到服務(wù)端數(shù)據(jù),但不建議這樣使用?。?!
/**
*信任所有證書(不建議使用)
- @return
*/
public static SSLSocketFactory getAllSSLSocketFactory(){
//創(chuàng)建X509信任管理器
TrustManager[] trustManagers = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動(dòng)開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新
如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以添加V獲?。簐ip204888 (備注Android)
尾聲
最后,我再重復(fù)一次,如果你想成為一個(gè)優(yōu)秀的 Android 開發(fā)人員,請(qǐng)集中精力,對(duì)基礎(chǔ)和重要的事情做深度研究。
對(duì)于很多初中級(jí)Android工程師而言,想要提升技能,往往是自己摸索成長(zhǎng),不成體系的學(xué)習(xí)效果低效漫長(zhǎng)且無(wú)助。 整理的這些架構(gòu)技術(shù)希望對(duì)Android開發(fā)的朋友們有所參考以及少走彎路,本文的重點(diǎn)是你有沒(méi)有收獲與成長(zhǎng),其余的都不重要,希望讀者們能謹(jǐn)記這一點(diǎn)。
最后想要拿高薪實(shí)現(xiàn)技術(shù)提升薪水得到質(zhì)的飛躍。最快捷的方式,就是有人可以帶著你一起分析,這樣學(xué)習(xí)起來(lái)最為高效,所以為了大家能夠順利進(jìn)階中高級(jí)、架構(gòu)師,我特地為大家準(zhǔn)備了一套高手學(xué)習(xí)的源碼和框架視頻等精品Android架構(gòu)師教程,保證你學(xué)了以后保證薪資上升一個(gè)臺(tái)階。
當(dāng)你有了學(xué)習(xí)線路,學(xué)習(xí)哪些內(nèi)容,也知道以后的路怎么走了,理論看多了總要實(shí)踐的。
進(jìn)階學(xué)習(xí)視頻
附上:我們之前因?yàn)榍镎惺占亩滓欢€互聯(lián)網(wǎng)公司Android面試真題?(含BAT、小米、華為、美團(tuán)、滴滴)和我自己整理Android復(fù)習(xí)筆記(包含Android基礎(chǔ)知識(shí)點(diǎn)、Android擴(kuò)展知識(shí)點(diǎn)、Android源碼解析、設(shè)計(jì)模式匯總、Gradle知識(shí)點(diǎn)、常見(jiàn)算法題匯總。)
習(xí)的源碼和框架視頻等精品Android架構(gòu)師教程,保證你學(xué)了以后保證薪資上升一個(gè)臺(tái)階。
當(dāng)你有了學(xué)習(xí)線路,學(xué)習(xí)哪些內(nèi)容,也知道以后的路怎么走了,理論看多了總要實(shí)踐的。
進(jìn)階學(xué)習(xí)視頻
[外鏈圖片轉(zhuǎn)存中…(img-F3VCFQsV-1711618050724)]
附上:我們之前因?yàn)榍镎惺占亩滓欢€互聯(lián)網(wǎng)公司Android面試真題?(含BAT、小米、華為、美團(tuán)、滴滴)和我自己整理Android復(fù)習(xí)筆記(包含Android基礎(chǔ)知識(shí)點(diǎn)、Android擴(kuò)展知識(shí)點(diǎn)、Android源碼解析、設(shè)計(jì)模式匯總、Gradle知識(shí)點(diǎn)、常見(jiàn)算法題匯總。)
[外鏈圖片轉(zhuǎn)存中…(img-YW4wEGFf-1711618050724)]文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-854788.html
本文已被CODING開源項(xiàng)目:《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》收錄文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854788.html
到了這里,關(guān)于Android Okhttp3添加https自簽名證書以及Glide4,Android高級(jí)工程師進(jìn)階學(xué)習(xí)—Android熱修復(fù)原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!