在iOS開發中,是如何處理好網路加密這塊的?[個人詳細分析],ios開發

來源:互聯網
上載者:User

在iOS開發中,是如何處理好網路加密這塊的?[個人詳細分析],ios開發

  公司的介面一般會兩種協議的,一種HTTP,一種HTTPS的,HTTP 只要請求,伺服器就會響應,如果我們不對請求和響應做出加密處理,所有資訊都是會被檢測劫持到的,是很不安全的,用戶端加密可以使用本文這套工具類進行處理。

  導言

  公司的介面一般會兩種協議的,一種HTTP,一種HTTPS的,HTTP 只要請求,伺服器就會響應,如果我們不對請求和響應做出加密處理,所有資訊都是會被檢測劫持到的,是很不安全的,用戶端加密可以使用本文這套工具類進行處理。

  但是不論在任何時候,都應該將服務置於HTTPS上,因為它可以避免中間人攻擊的問題,還內建了基於非對稱金鑰的加密通道。

  HTTPS互動原理

  簡答說,HTTPS 就是 HTTP協議加了一層SSL協議的加密處理,SSL 憑證就是遵守 SSL協議,由受信任的數位憑證頒發機構CA(如GlobalSign,wosign),在驗證伺服器身份後頒發,這是需要花錢滴,簽發後的認證作為公開金鑰一般放在伺服器的根目錄下,便於用戶端請求返回給用戶端,私密金鑰在伺服器的內部中心儲存,用於解密公開金鑰。

  HTTPS 用戶端與伺服器互動過程:

  1)用戶端發送請求,伺服器返回公開金鑰給用戶端;

  2)用戶端產生對稱式加密秘鑰,用公開金鑰對其進行加密後,返回給伺服器;

  3)伺服器收到後,利用私密金鑰解開得到對稱式加密秘鑰,儲存;

  4)之後的互動都使用對稱式加密後的資料進行互動。

  認證

  簡單說,認證有兩種,一種是正經的:

  CA頒發的認證

  一種是不正經的:

  自己產生簽發的認證

  我們需要做什麼

  如果遇到正經的認證,我們直接用AFNetworking 直接請求就好了,AFNetworking 內部幫我們封裝了HTTPS的請求方式,但是大部分公司介面都是不正經的認證,這時需要我們做以下幾步:

  1)將伺服器的密鑰憑證拖到Xcode中

  2)修改驗證模式

  manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];

  原理

  簡單來說,就是你本可以修改AFN這個設定來允許用戶端接收伺服器的任何認證,但是這麼做有個問題,就是你無法驗證認證是否是你的伺服器後端的認證,給中間人攻擊,即通過重新導向路由來分析偽造你的伺服器端開啟了大門。

  AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];

  securityPolicy.allowInvalidCertificates = YES;

  解決方案

  AFNetworking是允許內嵌認證的,通過內嵌認證,AFNetworking就通過比對伺服器端認證、內嵌的認證、網站網域名稱是否一致來驗證已連線的服務器是否正確。由於CA認證驗證是通過網站網域名稱進行驗證的,如果你的伺服器後端有綁定的網域名稱,這是最方便的。將你的伺服器端認證,如果是pem格式的,用下面的命令轉成cer格式

  openssl x509 -in <你的伺服器憑證>.pem -outform der -out server.cer

  然後將產生的server.cer檔案,如果有自建ca,再加上ca的cer格式認證,引入到app的bundle裡,AFNetworking在

  AFSecurityPolicy *securityPolicy = [AFSecurityPolicy AFSSLPinningModeCertificate];

  或者

  AFSecurityPolicy *securityPolicy = [AFSecurityPolicy AFSSLPinningModePublicKey];

  情況下,會自動掃描bundle中。cer的檔案,並引入,這樣就可以通過自簽認證來驗證伺服器唯一性了。

  AFSecurityPolicy三種驗證模式

  AFSSLPinningModeNone

  這個模式表示不做SSL pinning,

  只跟瀏覽器一樣在系統的信任機構列表裡驗證服務端返回的認證。若認證是信任機構簽發的就會通過,若是自己伺服器產生的認證就不會通過。

  AFSSLPinningModeCertificate這個模式表示用認證綁定方式驗證認證,需要用戶端儲存有服務端的認證拷貝,這裡驗證分兩步,第一步驗證認證的網域名稱有效期間等資訊,第二步是對比服務端返回的認證跟用戶端返回的是否一致。

  AFSSLPinningModePublicKey

  這個模式同樣是用認證綁定方式驗證,用戶端要有服務端的認證拷貝,

  只是驗證時只驗證認證裡的公開金鑰,不驗證認證的有效期間等資訊。只要公開金鑰是正確的,就能保證通訊不會被竊聽,因為中間人沒有私密金鑰,無法解開通過公開金鑰加密的資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.