Https的數據請求的證書設置 CFNetwork SSLHandshake failed (-9806)

對於https的網絡請求很多人都比較頭疼,不止iOS包括pc端和移動端的很多請求都離不開https

CFNetwork SSLHandshake failed (-9806)

error = Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “192.168.10.16” which could put your confidential information at risk." 

遇到以上錯誤的請舉手,沒錯這就是臭名昭著的https請求出現的錯誤。歸結原因證書原因。但是如何設置呢,你會發現百度一下子廢物了。現在就從iOS原生的網絡請求着手解決這一問題.

研究了一下NSURLConnection這個類會發現一下兩個代理

- (BOOL)connection:(NSURLConnection*)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace*)protectionSpace

- (void)connection:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge

沒錯,iOS本身提供了對於https請求證書的設置,就在代理方法裏。現在ok了,只要解決了代理的設置就可以完成完整的https請求

首先做好數據請求的相關準備



接着設置證書權限問題


看一下控制檯輸出

2013-11-02 14:07:07.719 HttpsRequest[485:70b] didReceiveAuthenticationChallenge NSURLAuthenticationMethodServerTrust 0

2013-11-02 14:07:07.720 HttpsRequest[485:70b] get the whole response

表明證書確實已經設置完成,現在可以做數據請求了



這裏用的是NSURLConnection的代理方法來執行數據接受,因爲塊方法沒辦法做證書相關的設置

現在看一下請求回來的數據

returnString = [{"id":"52707093fc8712d98a867bcd","title":"八達嶺長城走一走","date":1383177600000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"},{"id":"52707063fc8712d98a867bcc","title":"雍和宮一日遊","date":1385856000000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"},{"id":"5270700cfc8712d98a867bca","title":"雍和宮逛一逛","date":1388361600000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"},{"id":"52707047fc8712d98a867bcb","title":"香山一日遊","date":1388448000000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"}]

到這裏爲止,https的數據請求證書問題已經得到了解決。要說一下的是很多人會用AFNetwork的第三方,因爲這個框架也是對NSURLConnection的封裝和擴展,github上有對此類問題的細緻說明,可以看看。這裏只解決方向問題,細節問題還有待各位自己研究
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章