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

科普:簡化SSL/TLS的握手過程
SSL和TLS協議運行機制的資料詳細概述

SSL\TLS協議是什么?

評論