HTTPS 和 加密 和 AFNetworking 證書驗證
一、在做加密的時候突然想到一個問題,就是我們都已經用 HTTPS 傳輸了,為什麼還要加密呢?
既然有了這個疑惑,就抽空自己解惑了,翻閱資料,沒想到零零散散看了許多方面。今天總結下。
首先來解決自己的疑惑為什麼我們還要加密。
第一步來了解下 HTTPS 傳輸協議:
HTTPS 是兩部分組成:HTTP + SSL/TSL,就是在 HTTPS 加了一層加密處理。HTTPS 的作用是對在客戶端和伺服器端之間的傳輸進行加密處理。(這句話很關鍵,就解答了為什麼我們還要加密,因為HTTPS僅僅保護的是傳輸過程中的安全)。HTTPS是資料加密,對於一些埠,網址等並不進行加密處理。(對於抓包軟體抓到的包是明文,因為你客戶端直接通訊的是抓包軟體)。具體過程怎麼加密和解密,如下圖:
1、第一步向伺服器端發出請求,連線到伺服器端的 443 埠。
2、採用 HTTPS 協議的伺服器必須有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續方法,而使用信任的公司申請的證書則不會彈出信任彈框。這套證書分別分為公鑰和私鑰。公鑰就是用來加密,私鑰用來解密。
3、伺服器將公鑰放在response中傳給客戶端。
4、客戶端就行解析(當然不需要我們操作)。由客戶端的 TLS 來完成。驗證公鑰是否有效,頒發機構,過期時間等等。證書驗證通過產生隨機數,用公鑰將隨機數進行加密。
5、將用公鑰加密過的key傳給伺服器。以後可以通過該key進行加密。
6、伺服器通過使用私鑰將用公鑰加密過的key進行解密,獲取客戶端和伺服器端都擁有的key。
7、通過用私鑰解密過後的key對資料進行加密,返回給客戶端。
8、客戶端使用 key 將返回的資料進行解密。
二、AFSecurityPolicy
對於自制證書,在AFNetworking 請求時最好加上 SSL Pinning。
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"12306" ofType:@"cer"];//證書的路徑
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
NSSet *set = [NSSet setWithObject:certData];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey withPinnedCertificates:set;
securityPolicy.allowInvalidCertificates=YES; // 允許自建證書
securityPolicy.validatesDomainName=NO; // 是否開啟域名驗證
Mode::AFSSLPinningModePublicKey 防止證書過期此時要重新打包上線。
即在請求特定伺服器時,AFNetworking 會對伺服器傳來的證書就行驗證。通過則就繼續請求,失敗則取消請求。
對於組織申請的也可以通過 SSL Pinning 來驗證,來提高被攻擊的成本。
參考連結
http://nelson.logdown.com/posts/2015/04/29/how-to-properly-setup-afnetworking-security-connection/
相關文章
- HTTPS加密過程和TLS證書驗證HTTP加密TLS
- SSL證書生成,完成HTTPS驗證HTTP
- iOS 對 HTTPS 證書鏈的驗證iOSHTTP
- curl 設定https 不驗證證書HTTP
- https數字證書作用和數字證書是否可以登出?HTTP
- iOS 中對 HTTPS 證書鏈的驗證iOSHTTP
- .pfx 證書和 .cer 證書
- 非對稱加密和數字證書加密
- 非對稱加密和證書總結加密
- HTTPS 證書生成原理和部署細節HTTP
- DV證書和OV證書驗證過程有什麼不一樣
- 關於httpclient 請求https (如何繞過證書驗證)HTTPclient
- Jmeter進行HTTPS介面壓測及SSL證書驗證JMeterHTTP
- 生成https證書HTTP
- HTTPS信任證書HTTP
- 哪些IP SSL證書支援IP地址https加密呢?HTTP加密
- JavaScript驗證碼生成和驗證效果JavaScript
- 蘋果簽名證書:共享證書和獨享證書找不同蘋果
- 使用Moya庫,進行https證書校驗HTTP
- Nginx 配置https證書NginxHTTP
- 免費https證書HTTP
- Nginx https證書部署NginxHTTP
- SSL證書是什麼?HTTP和HTTPS的區別HTTP
- 手動驗證 TLS 證書TLS
- 如何區分SSL證書和國密SSL證書
- 企業級證書和個人證書的區別
- HTTPS 加密與認證機制HTTP加密
- Android 安全加密:數字簽名和數字證書Android加密
- Android安全加密:數字簽名和數字證書Android加密
- iOS HTTPS雙向認證以及證書操作iOSHTTP
- SSL證書是如何驗證的?驗證方式推薦
- HTTPS的SSL證書配置HTTP
- 建立並使用https證書HTTP
- 細說 CA 和證書
- Apache 配置https 自簽名證書 或者 購賣證書ApacheHTTP
- K重交叉驗證和網格搜尋驗證
- 從自簽名證書匯出pfx和cer證書
- 利用nginx和騰訊雲免費證書製作https的方法NginxHTTP