iOS app 支持HTTPS iOS開發者相關

来源:https://www.cnblogs.com/lurenq/archive/2019/03/13/10523740.html
-Advertisement-
Play Games

2016年12月21日更新開發者中心鏈接https://developer.apple.com/news/?id=12212016b該鏈接是蘋果昨天剛在官網給的正式回覆 如下: App Transport Security (ATS), introduced in iOS 9 and OS X v1 ...


2016年12月21日更新開發者中心鏈接
https://developer.apple.com/news/?id=12212016b
該鏈接是蘋果昨天剛在官網給的正式回覆 如下:

App Transport Security (ATS), introduced in iOS 9 and OS X v10.11, improves user security and privacy by requiring apps to use secure network connections over HTTPS. At WWDC 2016 we announced that apps submitted to the App Store will be required to support ATS at the end of the year. To give you additional time to prepare, this deadline has been extended and we will provide another update when a new deadline is confirmed. Learn more about ATS.

這個東西是為了讓大家放心 17年1月1日 不是蘋果最終的deadline 推遲了,下麵的步驟是iOS前端適配https 的全部步驟 按照步驟配置即可(不要再被網上傳的強制https的文章洗腦了,都是ssl證書頒發機構的軟文)

自從2016年的WWDC大會結束後,就出來個消息說,蘋果方面在2017年1月1日要開始全面支持https了,也就是說原來繞過ATS的方法不行了。沒有取巧的方式那就只能按照正規的流程來一遍了,這幾天把這個坑搞明白了,其實整個過程前端並不需要做太多東西,但是我還是把整個流程熟悉了一遍,這樣也算是蘋果做的一個強制,為整個安全領域推進了一步。

剛開始我也是在網上找了一些教程,但是最後感覺網上的這些流程都或多或少有些問題,而且並不能告訴app前端開發他們到底需要做什麼,畢竟大家都是剛開始走這個坑,對這個都不算太瞭解。所以我把做適配的這段時間走的坑總結一下。

對於HTTPS和HTTP的對比,本篇就不再作講解,因為網上有大量的對比,簡單的來說,HTTPS相對於HTTP更安全,更安全的原因就來自於多出來這個S----SSL證書

大致適配流程

(1)這裡先說整個過程的大體流程,如果你們的公司有運維的同學在,那麼先讓運維的同學去看一下正規大廠用的是什麼類型的SSL證書,額外說一下,現在很多網上有一些免費的證書,還有國內的一些廠商是比較便宜的證書,我不太建議去買這些,因為畢竟這次適配就是為了安全,不如一步到位。這裡就不再介紹自簽名一類的了,自簽名並沒有提升真正的安全度,算是模擬了簽名的過程。
(2)證書申請成功後,需要後臺的同學配置一下證書,將SSL證書綁定到後臺服務上。
(3)前兩步不需要前端的同學完成,前兩步完成後,前端的同學才拿到對應的證書去做前端的適配。如果你們的項目本身就有網路請求管理類,那麼只需要對管理類相關的代碼進行修改就行了,如果沒有,那就需要先封裝一個網路請求管理類,然後替換之前的所有網路請求方法(這個過程是反人類的,真希望你用不到這個辦法)

iOS app前端詳細適配流程

先說一下單向認證和雙向認證的區別:單向認證只要求站點部署了ssl證書就行,任何用戶都可以去訪問(IP被限制除外等),只是服務端提供了身份認證。而雙向認證則是需要是服務端需要客戶端提供身份認證,只能是服務端允許的客戶能去訪問,安全性相對於要高一些。

其實網上之前我查資料的時候已經發現了,大部分網上的認證都是雙向認證,但是他們都錯誤的理解其為單向認證了。下麵說一下app單向認證具體需要做什麼。

單向驗證

//在你封裝的網路工具類請求前初始化時增加以下代碼
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//設置證書模式,AFSSLPinningModeNone,代表前端包內不驗證
//在單向認證時,前端不放證書,伺服器去驗證
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
// 如果是需要服務端驗證證書,需要設置為YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要驗證功能變數名稱,預設為YES;
securityPolicy.validatesDomainName = NO;
//設置驗證模式
manager.securityPolicy = securityPolicy;

 

雙向驗證

雙向驗證的過程我就不說了,因為網上基本全部是雙向認證,需要把證書打包到應用的包里,這裡貼一個比較詳細的鏈接http://www.jianshu.com/p/f312a84a944c

這裡只把最關鍵的代碼跟單向認證做一個對比

//在你封裝的網路工具類請求前初始化時增加以下代
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//設置驗證證書,該模式下許願把證書打包進項目里,進行驗證
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//證書的路徑
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@".cer"];
NSData *dataSou = [NSData dataWithContentsOfFile:cerPath];
NSSet *set = [NSSet setWithObjects:dataSou, nil];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = YES;
[securityPolicy setPinnedCertificates:set];
//將驗證方式賦值給管理者
manager.securityPolicy = securityPolicy;

 

兩類驗證方式的最大區別其實在於,是否需要把證書打包進入應用內。

跟著這個問題隨之而來的就有另外的幾個問題,對於app前端開發來說,究竟選擇何種驗證方式比較好呢。其實對於app來說,單向驗證是最方便的,也是安全的,雙向驗證比單向來說更安全,但是對於app開發來說有幾個問題需要面對。所以下麵列一下單向和雙向的優點和缺點,你可以選擇最合適的方式來處理。

單向優點

1.更加靈活,客戶端不需要把相應證書打包進入app內,這個SSL證書是有過期時間的,如果過期了,只需要伺服器端修改證書即可,不會出現突然有一天莫名其妙app打不開了的問題。
2.雖然兩種驗證方法對於前端來說並沒有太多工作了,但是相對來說單向對於服務端和前端來說更簡單。

雙向優點

1.更加安全。但是相對來說開發成本更高

對比之後,我們的app最終選擇單向驗證的方式。更多的是為了避免如果修改了證書的廠家這種意外事件的處理,避免不必要的麻煩。

總結

其實對於前端來說,並沒有太多的工作量,重點是對於整個過程的理解和方式的選擇。所以也不要害怕17年的全面https的問題。

下麵是我自己個人的疑問,因為不確定明年的plist裡面的ATS是不是在提交應用的時候Allow Arbitrary Loads是不是必須不要設置或者設置為NO,所以我在前幾天向蘋果開發者中心發了一個郵件,得到的結果真是出人意料

  開發者中心郵件.png

這個回覆真是哭笑不得,一邊提倡https 一邊說現在還沒有對開發者做限制。不過管他呢,https是一個趨勢,先做了,一步到位就行,明年的Allow Arbitrary Loads 照樣上傳應用的時候設置YES了,17年1月1日到底蘋果是不是強制要求不讓這麼繞過,也不能確定。

這個坑過去了,但是ATS是對UIWebView和WKWebView有影響的,如果Allow Arbitrary Loads設置為NO, Allow Arbitrary Loads in Web Content不設置,那麼UIWebView和WKWebView不能正常的顯示,因為載入網頁也是需要基於http和https協議的。所以需要將Allow Arbitrary Loads in Web Content設置為YES。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 推薦閱讀: Redis入門教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的數據結構 5.1 Redis 數據結構介紹 redis是一種高級的key-value的存儲系統, 其中value支持五種數據類型。 1、字元串(Stri ...
  • 1、克隆虛擬機 找一臺需要克隆的虛擬機但虛擬機必須在關機下進行,(建議將前期Linux環境 配置完成) 在VMware中右鍵虛擬機找到克隆的選項。 點擊克隆 可以克隆他的快照(提前做快照)或者是克隆當前虛擬機,現在我要克隆他當前虛擬機 自己修改一個名字,放到你放置虛擬機的地方,建議不要放置在C盤下 ...
  • 筆記記錄自林曉斌(丁奇)老師的《MySQL實戰45講》 (本篇內圖片均來自丁奇老師的講解,如有侵權,請聯繫我刪除) 11) --怎麼給字元串欄位加索引? 日常工作中的登錄系統,你很可能會使用emai這個欄位。因此也很容易遇到類似這樣的語句: 我們知道,如果沒有索引那就只能使用全表掃描。並且MySQL ...
  • 當MySQL單表記錄數過大時,增刪改查性能都會急劇下降,可以參考以下步驟來優化: 單表優化 除非單表數據未來會一直不斷上漲,否則不要一開始就考慮拆分,拆分會帶來邏輯、部署、運維的各種複雜度,一般以整型值為主的表在千萬級以下,字元串為主的表在五百萬以下是沒有太大問題的。而事實上很多時候MySQL單表的 ...
  • 搭建管理節點 Ndb搜索引擎對於伺服器的記憶體要求比較高,因為所有數據節點的數據,以及索引,事務等等都需要載入進記憶體中。 下載 mysql-cluster-gpl-7.6.8-linux-glibc2.12-x86_64.tar.gz 集群壓縮包上傳至伺服器,解壓,這裡說明一下文件解壓後會比較大,儘量 ...
  • 1.查看mysql資料庫預設編碼: mysql> show variables like "character%"; + + +| Variable_name | Value |+ + +| character_set_client | utf8 || character_set_connectio ...
  • 獲取、管理手機中已安裝的所有應用信息 1、創建應用的實體類AppInfo,屬性有應用的名稱、包名、圖標、第一次安裝時間和版本名稱 public class AppInfo { private String name ;//應用名稱 private String packageName ;//應用包名 ...
  • SQLite資料庫存儲 創建資料庫 Android專門提供了一個 SQLiteOpenHelper幫助類對資料庫進行創建和升級 SQLiteOpenHelper需要創建一個自己的幫助類去繼承它並且重寫它的兩個抽象方法,即 onCreate() 和 onUpgrade() SQLiteOpenHelp ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...