使用TLS/SSL Pinning保護(hù)Android應(yīng)用程序
在現(xiàn)代術(shù)語中,“SSL”(安全套接層)通常指的是“TLS”(傳輸層安全)。雖然 SSL 和 TLS 不是同一個東西,但 TLS 是 SSL 的改進(jìn)和更安全的版本,并且在實踐中已大部分取代了 SSL。
簡介
SSL/TLS:互聯(lián)網(wǎng)安全的動態(tài)二人組! 這些是建立安全通信渠道的加密協(xié)議,確保在線交換過程中的數(shù)據(jù)隱私、完整性和認(rèn)證。SSL率先出擊,但TLS就像超級英雄一樣趕來,解決了混亂,拯救了一天! 現(xiàn)在,它們攜手合作,保護(hù)我們的數(shù)據(jù)免受邪惡黑客的侵害!
在互聯(lián)網(wǎng)安全領(lǐng)域,現(xiàn)代技術(shù)斗篷下的是 TLS,讓 SSL 在懷舊的塵埃中留下了身影! 所以下次當(dāng)你瀏覽網(wǎng)頁時,記住,是 TLS 像老板一樣守護(hù)你的秘密!
以下是 SSL 和 TLS 發(fā)布的完整歷史:
SSL 1.0 —— 因安全問題從未公開發(fā)布。 SSL 2.0 —— 1995 年發(fā)布。2011 年棄用。有已知的安全問題。 SSL 3.0 —— 1996 年發(fā)布。2015 年棄用。有已知的安全問題。 TLS 1.0 —— 1999 年作為 SSL 3.0 的升級版本發(fā)布。計劃于 2020 年棄用。 TLS 1.1 —— 2006 年發(fā)布。計劃于 2020 年棄用。 TLS 1.2 —— 2008 年發(fā)布。 TLS 1.3 —— 2018 年發(fā)布。 實現(xiàn) SSL/TLS 的網(wǎng)站在其 URL 中使用HTTPS而不是HTTP。
HTTPS(超文本傳輸安全協(xié)議)是 HTTP 和 SSL/TLS 協(xié)議的結(jié)合體。它加密了客戶端(在我們的例子中是安卓應(yīng)用程序)和服務(wù)器之間傳輸?shù)臄?shù)據(jù),防止未經(jīng)授權(quán)的訪問和篡改。HTTPS 協(xié)議在 URL 中以https://表示,對于安全的網(wǎng)絡(luò)通信至關(guān)重要。
理解 SSL Pinning
SSL pinning 就像給你應(yīng)用程序的派對制定一個可信的來賓名單。SSL pinning 不僅依賴證書頒發(fā)機(jī)構(gòu)(CA)來驗證 SSL/TLS 證書,還包括在你的應(yīng)用程序中硬編碼或“固定”信任服務(wù)器的公鑰或證書。這樣,應(yīng)用程序確保僅連接到指定的服務(wù)器,大大降低了中間人攻擊和未經(jīng)授權(quán)訪問的風(fēng)險。
SSL Pinning 的重要性
?防范中間人攻擊:沒有 SSL pinning 的話,攻擊者可以攔截你的應(yīng)用程序和服務(wù)器之間的通信,冒充中間人(MITM)。他們可以向你的應(yīng)用程序提供自己的 SSL 證書,從而破壞數(shù)據(jù)安全。SSL pinning 可以通過確保只有預(yù)定義的證書受信任來防止這種情況。
?抵抗 CA 受損:在傳統(tǒng)的 CA 驗證過程中,如果受信任的 CA 的私鑰被破壞,攻擊者可以發(fā)布你的應(yīng)用程序無意中信任的偽造證書。SSL pinning 消除了這個風(fēng)險,因為你的應(yīng)用程序不完全依賴 CA。
?增強(qiáng)數(shù)據(jù)隱私:SSL pinning 通過降低對敏感信息的未經(jīng)授權(quán)訪問的機(jī)會來加強(qiáng)數(shù)據(jù)隱私。
開始使用安卓網(wǎng)絡(luò)配置
安卓網(wǎng)絡(luò)配置允許開發(fā)者使用 XML 文件為其應(yīng)用程序定義網(wǎng)絡(luò)安全策略??梢詫⑵淇醋魇菫橐粓鍪⒋蟊硌莶季埃∥覀儗⒃诎沧宽椖康膔es/xml目錄中創(chuàng)建一個名為network_security_config.xml的文件。
定義受信任的域和固定值
讓我們首先在network_security_config.xml中定義我們受信任的域及其相應(yīng)的公鑰固定值:
example.com ReplaceWithYourPin ReplaceWithYourPin
固定值是X.509 SubjectPublicKeyInfo(SPKI)的base64編碼摘要。將ReplaceWithYourPin替換為受信任域(例如example.com)的公鑰或證書的實際 SHA-256 哈希的 base64 編碼。您可以通過檢查服務(wù)器的SSL/TLS證書或使用此ssllabs網(wǎng)站獲取這些固定值。不知道如何獲???請查看下面的博客。
查看此博客以揭示您的 SHA-256 哈希和 Base64 編碼的固定值! —— 使用 SSL Labs 揭示 SHA-256 指紋 ——SSL Pinning
應(yīng)用網(wǎng)絡(luò)配置
接下來,我們需要告訴我們的應(yīng)用程序使用這個網(wǎng)絡(luò)配置。打開AndroidManifest.xml文件,并向
...
這樣配置你的應(yīng)用程序來使用指定的網(wǎng)絡(luò)安全配置。
現(xiàn)在,讓我們把我們的配置測試一下! 使用 URL 進(jìn)行 HTTPS 連接
配置好網(wǎng)絡(luò)后,現(xiàn)在是時候釋放HttpsURLConnection類的力量了! 這位精通技術(shù)的英雄是我們進(jìn)行安全的 HTTPS 連接的關(guān)鍵。
try{ //為目標(biāo)服務(wù)器創(chuàng)建一個URL對象 valmURL=URL("https://example.com/api/data") with(mURL.openConnection()asHttpsURLConnection){ requestMethod="GET" //在這里添加任何必要的頭部 println("URL:${this.url}") println("ResponseCode:${this.responseCode}") //執(zhí)行實際的連接并處理響應(yīng) valresponseCode=responseCode if(responseCode==HttpsURLConnection.HTTP_OK){ //萬歲!連接成功-是時候慶祝了! //現(xiàn)在,讓我們處理響應(yīng),展示我們的數(shù)據(jù)處理技能! }else{ //哎呀!優(yōu)雅地處理其他響應(yīng)代碼(例如,錯誤情況) //每個超級英雄都會面臨挑戰(zhàn)-如何處理才是最重要的! } } }catch(e:Throwable){ //哦哦!無效的SSLpinning或其他網(wǎng)絡(luò)錯誤-但別害怕,我們已經(jīng)準(zhǔn)備就緒! //是時候排除故障并用正確的錯誤處理拯救這一天了! println(e) }
有了我們的SSL pinning和HttpsURLConnection,我們可以自信地駕馭數(shù)字海洋,知道我們用戶的數(shù)據(jù)是安全的。所以,放心地進(jìn)行安全的 HTTPS 連接測試吧!
審核編輯:劉清
-
URL
+關(guān)注
關(guān)注
0文章
139瀏覽量
15386 -
SSL
+關(guān)注
關(guān)注
0文章
126瀏覽量
25754 -
XML技術(shù)
+關(guān)注
關(guān)注
0文章
15瀏覽量
6024 -
TLS
+關(guān)注
關(guān)注
0文章
44瀏覽量
4262
原文標(biāo)題:使用TLS/SSL Pinning保護(hù)Android應(yīng)用程序
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論