日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS9 HTTPS

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS9 HTTPS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:?https://github.com/ChenYilong/iOS9AdaptationTips

?

關于App Transport Security,每個應用都屬于4個大類當中的一類。我們來看看每一個大類都是怎樣影響應用的。

--分類名解釋
1.HTTPS Only (只有HTTPS,所有情況下都使用ATS)如果你的應用只基于支持HTTPS的服務器,你的應用不需要做任何改變。但是,注意App Transport Security要求TLS 1.2,而且它要求站點使用支持forward secrecy協議的密碼。證書也要求是符合ATS規格的。因此慎重檢查與你的應用交互的服務器是不是符合ATS的要求。
2.Mix & Match(混合)如果你的服務器不符合ATS要求,你需要在你的應用的 Info.plist 文件中說明哪些地址是不符合ATS要求的。
3.Opt Out(禁用ATS)如果你在創建一個網頁瀏覽器,因為你不能確定用戶將要訪問哪個網頁,也就不可能指明這些網頁是否支持ATS要求且在HTTPS上傳輸。在這種情況下,只能配置為禁用ATS。
4.Opt Out With Exceptions(除特殊情況外,都不使用ATS)如果想禁用ATS的同時又想定義一些例外。這個應用場景是當你的應用需要從很多不符合ATS要求的服務器上取數據,但是也要與一個你可控的API(符合ATS要求)交互。在這種情況下,需要在應用的 Info.plist 文件中配置為允許所有請求,但是你也指定了一個或多個例外來表明哪些請求是必須符合ATS的要求。

下面分別做一下介紹:

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

如果你的應用只基于支持HTTPS的服務器,那么你太幸運了。你的應用不需要做任何改變。

唯一需要做的事情就是使用?NSURLSession?。如果你的開發目標是iOS 9或者 OS X EI Capitan之后,ATS 的最佳實踐將會應用到所有基于?NSURLSession?的網絡。

但也有人遇到過這樣的疑惑:服務器已支持TLS 1.2 SSL ,但iOS9上還是不行,還要進行本文提出的適配操作。

那是因為:要注意 App Transport Security 要求 TLS 1.2,而且它要求站點使用支持forward secrecy協議的密碼。證書也要求是符合ATS規格的,ATS只信任知名CA頒發的證書,小公司所使用的 self signed certificate,還是會被ATS攔截。因此慎重檢查與你的應用交互的服務器是不是符合ATS的要求非常重要。對此,建議使用下文中給出的NSExceptionDomains,并將你們公司的域名掛在下面。

官方文檔?App Transport Security Technote?對CA頒發的證書要求:

Certificates must be signed using a SHA256 or better signature hash algorithm, with either a 2048 bit or greater RSA key or a 256 bit or greater Elliptic-Curve (ECC) key. Invalid certificates result in a hard failure and no connection

2.Mix & Match(混合)

如果你的服務器不符合ATS要求。

比如當你遇到以下三個不符合 ATS 要求的服務器的域名時:

  • api.insecuredomain.com
  • cdn.domain.com
  • thatotherdomain.com
  • 你可以分別設置如下:

  • api.insecuredomain.com

    Info.plist 配置中的XML源碼如下所示:

    <key>NSAppTransportSecurity</key><dict><key>NSExceptionDomains</key><dict><key>api.insecuredomain.com</key><dict><!--允許App進行不安全的HTTP請求--><key>NSExceptionAllowsInsecureHTTPLoads</key><true/><!--適用于這個特定域名下的所有子域--><key>NSIncludesSubdomains</key><true/></dict></dict></dict>

      

    在 plist 文件里顯示如下:

    我們定義的第一個“例外”(Exception)告訴ATS當與這個子域交互的時候撤銷了必須使用HTTPS的要求。注意這個僅僅針對在“例外”(Exception)中聲明了的子域。非常重要的一點是要理解NSExceptionAllowsInsecureHTTPLoads關鍵字并不僅僅只是與使用HTTPS相關。這個“例外”(Exception)指明了對于那個域名,所有的App Transport Security的要求都被撤銷了。

  • cdn.domain.com Info.plist 配置中的XML源碼如下所示:

    <key>NSAppTransportSecurity</key><dict><key>NSExceptionDomains</key><dict><key>cdn.somedomain.com</key><dict><key>NSThirdPartyExceptionMinimumTLSVersion</key><string>TLSv1.1</string></dict></dict></dict>

      

    在 plist 文件里顯示如下:

    很可能你的應用是與一個支持HTTPS傳輸數據的服務器交互,但是并沒有使用TLS 1.2或更高。在這種情況下,你定義一個“例外”(Exception),它指明應該使用的最小的TLS的版本。這比完全撤銷那個域名的App Transport Security要更好更安全。

  • thatotherdomain.com

    Info.plist 配置中的XML源碼如下所示:

    <key>NSAppTransportSecurity</key><dict><key>NSExceptionDomains</key><dict><key>thatotherdomain.com</key><dict><!--適用于這個特定域名下的所有子域--><key>NSIncludesSubdomains</key><true/><!--擴展可接受的密碼列表:這個域名可以使用不支持 forward secrecy 協議的密碼--><key>NSExceptionRequiresForwardSecrecy</key><false/><!--允許App進行不安全的HTTP請求--><key>NSExceptionAllowsInsecureHTTPLoads</key><true/><!--在這里聲明所支持的 TLS 最低版本--><key>NSExceptionMinimumTLSVersion</key><string>TLSv1.1</string></dict></dict></dict>

      

    在 plist 文件里顯示如下:

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

  • 如果你的App中同時用到了這三個域名,那么應該是這樣:

    <key>NSAppTransportSecurity</key><dict><key>NSExceptionDomains</key><dict><key>api.insecuredomain.com</key><dict><key>NSExceptionAllowsInsecureHTTPLoads</key><false/></dict><key>cdn.somedomain.com</key><dict><key>NSThirdPartyExceptionMinimumTLSVersion</key><string>TLSv1.1</string></dict><key>thatotherdomain.com</key><dict><key>NSIncludesSubdomains</key><true/><key>NSExceptionRequiresForwardSecrecy</key><false/></dict></dict></dict>

      

    3. Opt Out(禁用ATS)

    上面是比較嚴謹的做法,指定了能訪問哪些特定的HTTP。當然也有暴力的做法: 徹底倒退回不安全的HTTP網絡請求,能任意進行HTTP請求,比如你在開發一款瀏覽器App,或者你想偷懶,或者后臺想偷懶,或者公司不給你升級服務器。。。

    你可以在Info.plist 配置中改用下面的XML源碼:

    <key>NSAppTransportSecurity</key><dict><!--徹底倒退回不安全的HTTP網絡請求,能任意進行HTTP請求 (不建議這樣做)--><key>NSAllowsArbitraryLoads</key><true/></dict>

      

    在 plist 文件里顯示如下:

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

    上面已經介紹了三種情景,還有一種可能你也會遇到:

    當你禁用ATS的同時又想定義一些“例外”(Exception)。這個應用場景是當你的應用需要從很多不符合ATS要求的服務器上取數據,但是也要與一個你可控的API(符合ATS要求)交互。在這種情況下,在應用的Info.plist文件中配置為允許所有請求,但是你也指定了一個或多個“例外”(Exception)來表明哪些地址是必須符合 App Transport Security 要求的。下面是Info.plist文件應該會有的內容:

    <key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/><key>NSExceptionDomains</key><dict><key>api.tutsplus.com</key><dict><key>NSExceptionAllowsInsecureHTTPLoads</key><false/></dict></dict></dict>

      

    在 plist 文件里顯示如下:

    ?

    ?

    Certificate Transparency

    雖然ATS大多數安全特性都是默認可用的,Certificate Transparency 是必須設置的。如果你有支持Certificate Transparency的證書,你可以檢查NSRequiresCertificateTransparency關鍵字來使用Certificate Transparency。再次強調,如果你的證書不支持Certificate Transparency,此項需要設置為不可用。

    如果需要調試一些由于采用了ATS而產生的問題,需要設置CFNETWORK_DIAGNOSTICS為1,這樣就會打印出包含被訪問的URL和ATS錯誤在內的NSURLSession錯誤信息。要確保處理了遇到的所有的錯誤消息,這樣才能使ATS易于提高可靠性和擴展性。

    ?

    轉載于:https://www.cnblogs.com/FranZhou/p/5190506.html

    總結

    以上是生活随笔為你收集整理的iOS9 HTTPS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。