2016-09-14 40 views
13

我有一個iOS應用程序將分發給多個客戶,每個客戶使用他們自己的網絡基礎設施。我想添加一些證書固定功能,但是我需要以動態的方式來完成,因爲我無法使用捆綁的cert/pubkey發佈應用程序,因爲這樣做需要爲每個客戶建立不同的版本。動態證書鎖定

我的想法是在應用程序啓動時查詢每個客戶端配置的HTTPS服務器,獲取證書,可能會提取公鑰並將其固定。

是否有可能在Swift或Objective-C中做到這一點?我一直無法找到相關的代碼示例或文檔。

+0

您是否試過SSLPinningMode? [this](http://stackoverflow.com/questions/16613081/ssl-pinning-with-afnetworking)可能會有所幫助。如果您打算在應用商店分發這些內容,我懷疑它會被接受(有關下載和提取證書的部分)。 – jugutier

+2

下面是一個iOS推出限制的例子:https://github.com/iosptl/ios7ptl/blob/master/ch14-Security/Connection/Connection/ConnectionViewController.m。看看'RNSecTrustEvaluateAsX509'。它包含從連接中提取證書的代碼。然後,您可以將證書寫入文件,然後使用標準固定實踐(如https://github.com/rnapier/RNPinnedCertValidator)。 –

+0

不相關的meta cruft,但@RobNapier你計劃推出新版本的推動極限iOS 10? – JAL

回答

1

從操作上來說,如果將證書或密鑰嵌入到應用程序中,管理和從錯誤配置中恢復將會容易得多。如果您第一次將服務器發送給應用程序的任何證書掛起,那麼一旦當前證書過期或輪換後,就沒有機制支持新證書。如果這仍然是你想要做的,我會建議看看HPKP規範,它實現了相同的機制,但對瀏覽器:https://tools.ietf.org/html/rfc7469

此外,如果應用程序服務器不直接在您的控制下,如果服務器的證書意外發生更改,那麼更改該鎖定最終會刷新應用程序。構建應用程序的團隊是否會被告知應用程序/客戶服務器上的基礎架構/證書更改,以便他們能及時發佈更新?如果沒有,你不應該這樣做。

+0

我剛剛提出了這個答案。我意識到這不是海報所要求的,但是這個答案非常有用,並指出了做海報所暗示的內容的危險性並提供了額外的信息。根據幫助部分,這篇文章是'有趣的,深入研究和有用的'。 –