国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

https協(xié)議升級(jí)

2019-11-09 18:05:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

發(fā)現(xiàn)一篇好文章,小小修改記錄下 原文地址:http://www.jianshu.com/p/b03ae4a1a2d3

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

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

最新消息:蘋(píng)果關(guān)于接入https的截止時(shí)間被延期了,具體截止時(shí)間尚未定,蘋(píng)果推遲https接入截止時(shí)間,小伙伴們!別太著急了!

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

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

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

注意:加了這個(gè)配置后,http和https都是兼容的,如果是https請(qǐng)求,會(huì)繼續(xù)走h(yuǎn)ttps,是http請(qǐng)求會(huì)繼續(xù)走h(yuǎn)ttp

配置如下:

這種方法只能說(shuō)治標(biāo)不治本,再說(shuō)蘋(píng)果公司也做出了規(guī)定2017年上架的app必須使用https不然可能無(wú)法通過(guò)審核,所以為了適配https的第一步就是刪除這個(gè)配置,講默認(rèn)請(qǐng)求方式設(shè)置成https。刪除后再次啟動(dòng)程序會(huì)發(fā)現(xiàn)請(qǐng)求全部失敗,這個(gè)錯(cuò)誤相信大家都很熟悉,沒(méi)錯(cuò)就是因?yàn)榉?wù)器不支持https導(dǎo)致的。

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

      我項(xiàng)目中使用的是AFNetworking 3.1,所以我先利用AFNetworking做適配(其實(shí)AFNetworking的https適配還是利用NSURLSession(NSURLConnection)做的適配,只不過(guò)NSURLSession(NSURLConnection)適配有點(diǎn)麻煩,AFNetworking的適配更加簡(jiǎn)單),原本的manager初始化不變,只不過(guò)需要為manager的securityPolicy設(shè)置值(不好意思哦!不知道怎么樣才能添加規(guī)范的代碼,只能用截圖來(lái)代替了)。

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

檢查后發(fā)現(xiàn)請(qǐng)求的路徑不對(duì),之前都是http,忘記改成https了(請(qǐng)求的路徑一定要跟服務(wù)器開(kāi)發(fā)人員確定好了),修改完成后還是報(bào)錯(cuò),抓狂??!還是很奇葩的錯(cuò)誤,請(qǐng)求被取消了,錯(cuò)誤碼-999,

找了很多資料才發(fā)現(xiàn)還需要站點(diǎn)證書(shū),上面請(qǐng)求失敗可能是因?yàn)閟sl第一次握手的時(shí)候驗(yàn)證沒(méi)通過(guò),然后就直接被取消了。所以這時(shí)候就需要獲取站點(diǎn)的證書(shū),獲取的方法有兩種:

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

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

這個(gè)命令的目的就是直接在你的終端打開(kāi)的當(dāng)前目錄下面下載某一站點(diǎn)的證書(shū),但是我怎么都獲取不到下載的證書(shū)都是空的,而且終端還報(bào)錯(cuò),找不到錯(cuò)誤的原因,沒(méi)辦法只能用第二種辦法了

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

獲取到證書(shū)后把證書(shū)放到項(xiàng)目的mainbundle中,并用代碼獲取

這時(shí)候再跑起來(lái),接口都能獲取到數(shù)據(jù)了,成功了,不過(guò)到這里大家不知道會(huì)不會(huì)存在疑問(wèn),證書(shū)這么容易獲取到,那別人獲取了怎么辦?就算用抓包工具攔截了請(qǐng)求里面的內(nèi)容都是加密的,但是別人可以利用證書(shū)向我們服務(wù)器發(fā)請(qǐng)求的,是不是也存在點(diǎn)問(wèn)題呢?這個(gè)問(wèn)題我到現(xiàn)在還不是很明白,有的資料說(shuō)這樣獲取的證書(shū)是公鑰,沒(méi)有私鑰的話(huà)也是白費(fèi)力氣。

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

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

      App Transport Security(簡(jiǎn)稱(chēng)ATS)特性, 主要使到原來(lái)請(qǐng)求的時(shí)候用到的HTTP,都轉(zhuǎn)向TLS1.2協(xié)議進(jìn)行傳輸。這也意味著所有的HTTP協(xié)議都強(qiáng)制使用了HTTPS協(xié)議進(jìn)行傳輸,ATS是在iOS 9.0 和 OS X v10.11版本中增加的特性,使用iOS 9.0或者OS X v10.11的SDK版本(或更新的SDK)進(jìn)行編譯應(yīng)用時(shí)會(huì)默認(rèn)啟動(dòng)ATS。則需要對(duì)ATS進(jìn)行配置。如果使用iOS 9.0或者OS X v10.11之前的SDK版本編譯的應(yīng)用默認(rèn)是禁止ATS的,因此不會(huì)影響應(yīng)用的網(wǎng)絡(luò)連接方面的功能(即使在iOS 9.0的機(jī)子上跑也是不影響的)。其實(shí)ATS并不單單針對(duì)HTTP進(jìn)行了限制,對(duì)HTTPS也有一定的要求:

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

),文檔中羅列出了支持的加密算法(上面的原文中有說(shuō)明,我把它獨(dú)立抽出來(lái)放到下面表格中查看)。最后就是證書(shū)至少要使用一個(gè)SHA256的指紋與任一個(gè)2048位或者更高位的RSA密鑰,或者是256位或者更高位的ECC密鑰。如果不符合其中一項(xiàng),請(qǐng)求將被中斷并返回nil,簡(jiǎn)單的說(shuō)就是下面幾個(gè)要求:

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

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

3.證書(shū)簽名算法符合ATS要求等

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

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

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

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

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

2.Mix & Match(混合)

這種類(lèi)型主要某些第三方的請(qǐng)求不支持https或者支持的https不符合ATS的情況:

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

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

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

3. Opt Out(禁用ATS)

這個(gè)也是目前做法最廣泛的一種方式,把默認(rèn)的請(qǐng)求的請(qǐng)求方式變成不安全的http,方法上面已經(jīng)說(shuō)過(guò)了。

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 威远县| 讷河市| 从江县| 独山县| 师宗县| 峡江县| 营口市| 固镇县| 孟津县| 襄城县| 高平市| 乐亭县| 开化县| 南郑县| 东乡县| 交口县| 曲靖市| 韩城市| 宾阳县| 得荣县| 龙州县| 夹江县| 全椒县| 宣汉县| 永宁县| 吕梁市| 钦州市| 萝北县| 缙云县| 修武县| 彭山县| 荣成市| 图木舒克市| 宜城市| 疏附县| 安达市| 晴隆县| 化州市| 年辖:市辖区| 化州市| 鄯善县|