iOS配置HTTPS

https://github.com/ChenYilong/iOS9AdaptationTips

配置方法 :http://oncenote.com/2014/10/21/Security-1-HTTPS/

HTTPS服務(wù)器信任評估

https://developer.apple.com/library/content/technotes/tn2232/_index.html


?關(guān)于https的簡介和說明我都是參考下面的文章:(謝謝文章作者)

1.http://my.oschina.net/vimfung/blog/494687

2.http://oncenote.com/2014/10/21/Security-1-HTTPS/

3.http://blog.csdn.net/dachao_me/article/details/48624685?ref=myread

最新消息:蘋果關(guān)于接入https的截止時間被延期了汽烦,具體截止時間尚未定甚牲,蘋果推遲https接入截止時間足丢,小伙伴們很魂!別太著急了!

https的說明我就不多說了麸俘,想要了解詳細內(nèi)容查看上面的鏈接楷掉,很多專業(yè)名詞我也不是很明白张吉,只后悔大學(xué)的時候關(guān)于網(wǎng)絡(luò)工程等一些課程沒有好好聽吧!我寫這篇文章主要是為了iOS工程中http轉(zhuǎn)化為https的教程油额。


1.修改info.plist中不安全的http兼容配置

? ? ? ? ? ?目前絕大多數(shù)工作為了解決https的問題叠纷,直接在info.plist中添加配置使得系統(tǒng)的請求類NSURLSession(NSURLConnection)默認的請求方式從https轉(zhuǎn)化為http,

注意:加了這個配置后,http和https都是兼容的潦嘶,如果是https請求涩嚣,會繼續(xù)走https,是http請求會繼續(xù)走http

配置如下:

這種方法只能說治標不治本掂僵,再說蘋果公司也做出了規(guī)定2017年上架的app必須使用https不然可能無法通過審核航厚,所以為了適配https的第一步就是刪除這個配置,講默認請求方式設(shè)置成https看峻。刪除后再次啟動程序會發(fā)現(xiàn)請求全部失敗阶淘,這個錯誤相信大家都很熟悉,沒錯就是因為服務(wù)器不支持https導(dǎo)致的互妓。


2.使用系統(tǒng)的NSURLSession(NSURLConnection)或者第三方的請求框架(AFNetworking)實現(xiàn)https適配

? ? ? 我項目中使用的是AFNetworking 3.1溪窒,所以我先利用AFNetworking做適配(其實AFNetworking的https適配還是利用NSURLSession(NSURLConnection)做的適配,只不過NSURLSession(NSURLConnection)適配有點麻煩冯勉,AFNetworking的適配更加簡單)澈蚌,原本的manager初始化不變,只不過需要為manager的securityPolicy設(shè)置值(不好意思哦灼狰!不知道怎么樣才能添加規(guī)范的代碼宛瞄,只能用截圖來代替了)。


添加完成之后還是出現(xiàn)上面的問題:

檢查后發(fā)現(xiàn)請求的路徑不對交胚,之前都是http份汗,忘記改成https了(請求的路徑一定要跟服務(wù)器開發(fā)人員確定好了),修改完成后還是報錯蝴簇,抓狂1睢!還是很奇葩的錯誤熬词,請求被取消了旁钧,錯誤碼-999吸重,

找了很多資料才發(fā)現(xiàn)還需要站點證書,上面請求失敗可能是因為ssl第一次握手的時候驗證沒通過歪今,然后就直接被取消了嚎幸。所以這時候就需要獲取站點的證書,獲取的方法有兩種:

1.通過openssl命令獲取寄猩,命令如下(以百度為例):

openssl s_client -connect www.baidu.com:443 /dev/null | openssl x509 -outform DER > https1.cer

這個命令的目的就是直接在你的終端打開的當(dāng)前目錄下面下載某一站點的證書嫉晶,但是我怎么都獲取不到下載的證書都是空的,而且終端還報錯焦影,找不到錯誤的原因车遂,沒辦法只能用第二種辦法了

2.直接在瀏覽器中打開項目的任意一個接口的完整路徑,如果你服務(wù)器支持https的話會在鏈接的前面出現(xiàn)一個小鎖的圖標(我使用的是safair瀏覽器)斯辰,點擊小鎖會出現(xiàn)提示點擊顯示證書就會出現(xiàn)站點證書的信息了(以百度為例)舶担,點擊證書的圖標到桌面上就可以把證書下載到桌面上了,這樣就獲取到站點證書了(這種方式不知道會不會存在啥問題彬呻,但是到目前為止我沒遇到啥問題)

獲取到證書后把證書放到項目的mainbundle中衣陶,并用代碼獲取

這時候再跑起來,接口都能獲取到數(shù)據(jù)了闸氮,成功了剪况,不過到這里大家不知道會不會存在疑問,證書這么容易獲取到蒲跨,那別人獲取了怎么辦译断?就算用抓包工具攔截了請求里面的內(nèi)容都是加密的,但是別人可以利用證書向我們服務(wù)器發(fā)請求的或悲,是不是也存在點問題呢孙咪?這個問題我到現(xiàn)在還不是很明白,有的資料說這樣獲取的證書是公鑰巡语,沒有私鑰的話也是白費力氣翎蹈。

3.由于iOS做https適配的時候?qū)Ψ?wù)器是有要求的(一個符合 ATS 要求的 HTTPS),所以出了問題也不一定是客戶端的問題

? ? ? ?其實上面成功了男公,但是還有很多概念不是很清楚荤堪,例如啥叫ATS(App Transport Security),它跟https有啥關(guān)系呢枢赔?

App Transport Security(簡稱ATS)特性, 主要使到原來請求的時候用到的HTTP澄阳,都轉(zhuǎn)向TLS1.2協(xié)議進行傳輸。這也意味著所有的HTTP協(xié)議都強制使用了HTTPS協(xié)議進行傳輸踏拜,ATS是在iOS 9.0 和 OS X v10.11版本中增加的特性待错,使用iOS 9.0或者OS X v10.11的SDK版本(或更新的SDK)進行編譯應(yīng)用時會默認啟動ATS鼻疮。則需要對ATS進行配置粒没。如果使用iOS 9.0或者OS X v10.11之前的SDK版本編譯的應(yīng)用默認是禁止ATS的曲管,因此不會影響應(yīng)用的網(wǎng)絡(luò)連接方面的功能(即使在iOS 9.0的機子上跑也是不影響的)。其實ATS并不單單針對HTTP進行了限制镀琉,對HTTPS也有一定的要求:

首先頒發(fā)給服務(wù)器證書的證書機構(gòu)(CA)的根證書必須是內(nèi)置于操作系統(tǒng)(哪些根證書被信任可以查看https://support.apple.com/zh-cn/HT205205峦嗤,或者在你的機子的設(shè)置-通用-關(guān)于本機最下面的“進一步了解被信任的證書”中查看,百度的CA根證書:)或者受用戶或者系統(tǒng)管理員信任并安裝到操作系統(tǒng)上的屋摔。而且必須要基于TLS 1.2版本協(xié)議(以百度為例烁设,最好使用chrome瀏覽器,其他的瀏覽器我沒找到查看TSL協(xié)議的版本號)钓试。再來就是連接的加密方式要提供Forward Secrecy(FS正向保密装黑,感興趣的筒子可以看看這個https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html,--弓熏!已經(jīng)打不開了恋谭,支持Forward Secrecy的加密方式

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

),文檔中羅列出了支持的加密算法(上面的原文中有說明挽鞠,我把它獨立抽出來放到下面表格中查看)疚颊。最后就是證書至少要使用一個SHA256的指紋與任一個2048位或者更高位的RSA密鑰,或者是256位或者更高位的ECC密鑰信认。如果不符合其中一項材义,請求將被中斷并返回nil,簡單的說就是下面幾個要求:

1.Transport Layer Security協(xié)議版本要求TLS1.2以上

2.服務(wù)的Ciphers配置要求支持Forward Secrecy等

3.證書簽名算法符合ATS要求等

以上就是一次排查服務(wù)器的https是否符合ATS規(guī)格的方法嫁赏,當(dāng)然也可以使用下面的命令行一次性查詢:輸出結(jié)果都是pass的話就說明鏈接是支持ATS的其掂。

nscurl --ats-diagnostics --verbose https://www.baidu.com

4.由于很多第三方的請求尚未適配https,所以iOS的ATS規(guī)格又分為四大類

1.HTTPS Only (只有HTTPS潦蝇,所有情況下都使用ATS)

顧名思義款熬,這種情況不需要針對某一個域名或者站點做特殊處理,只要服務(wù)器的https符合ATS規(guī)格就可以了

2.Mix & Match(混合)

這種類型主要某些第三方的請求不支持https或者支持的https不符合ATS的情況:

2.1 在info.plist中添加這個配置項后护蝶,ATS當(dāng)與這個子域交互的時候撤銷了必須使用HTTPS的要求(以友盟為例)

2.2 當(dāng)你請求的第三方服務(wù)器支持了https华烟,但是不符合ATS規(guī)格,例如SSL版本低于1.2或者FS加密不符合要求的時候持灰,可以做如下配置:

2.3 NSIncludesSubdomains 關(guān)鍵字告訴 App Transport Security 這個“例外”(Exception)適用于這個特定域名的所有子域盔夜。這個“例外”(Exception)還進一步通過擴展可接受的密碼列表來定義這個域名可以使用不支持forward secrecy( NSExceptionRequiresForwardSecrecy ) 協(xié)議的密碼。想了解更多關(guān)于forward secrecy的信息堤魁,推薦去看官方文檔Apple's tech note

3. Opt Out(禁用ATS)

這個也是目前做法最廣泛的一種方式喂链,把默認的請求的請求方式變成不安全的http,方法上面已經(jīng)說過了妥泉。

4. Opt Out With Exceptions(除特殊情況外椭微,都不使用ATS)

當(dāng)你的應(yīng)用撤消了App Transport Security,,但同時定義了一些“例外”(Exception)盲链,指定了一個或多個“例外”(Exception)來表明哪些是必須要求 App Transport Security的蝇率。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迟杂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子本慕,更是在濱河造成了極大的恐慌排拷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅尘,死亡現(xiàn)場離奇詭異监氢,居然都是意外死亡,警方通過查閱死者的電腦和手機藤违,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門浪腐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顿乒,你說我怎么就攤上這事议街。” “怎么了淆游?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵傍睹,是天一觀的道長。 經(jīng)常有香客問我犹菱,道長拾稳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任腊脱,我火速辦了婚禮访得,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陕凹。我一直安慰自己悍抑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布杜耙。 她就那樣靜靜地躺著搜骡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佑女。 梳的紋絲不亂的頭發(fā)上记靡,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音团驱,去河邊找鬼摸吠。 笑死,一個胖子當(dāng)著我的面吹牛嚎花,可吹牛的內(nèi)容都是我干的寸痢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼紊选,長吁一口氣:“原來是場噩夢啊……” “哼啼止!你這毒婦竟也來了道逗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤献烦,失蹤者是張志新(化名)和其女友劉穎憔辫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仿荆,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年坏平,在試婚紗的時候發(fā)現(xiàn)自己被綠了拢操。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡舶替,死狀恐怖令境,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顾瞪,我是刑警寧澤舔庶,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站陈醒,受9級特大地震影響惕橙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钉跷,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一弥鹦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爷辙,春花似錦彬坏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至血当,卻和暖如春幻赚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歹颓。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工坯屿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巍扛。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓领跛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撤奸。 傳聞我的和親對象是個殘疾皇子吠昭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容