2016-11-09 53 views
0

我在Swift 3中使用Alamofire 4來構建應用程序以將數據傳遞到MDM服務器的API以進行批量更新。在Alamofire中動態允許自簽名證書4

某些用戶在其本地託管服務器上使用內置CA或自簽名SSL證書,如果該證書未下載並安裝到鑰匙串,Alamofire將不允許通信。

我發現自述的安全部分,寫了下面的代碼:

private static var Manager: Alamofire.SessionManager = { 

    // Create the server trust policies 
    let serverTrustPolicies: [String: ServerTrustPolicy] = [ 
     "my.on-prem-server.com": .disableEvaluation    
    ] 

    // Create custom manager 
    let configuration = URLSessionConfiguration.default 
    configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders 
    let manager = Alamofire.SessionManager(
     configuration: URLSessionConfiguration.default, 
     serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) 
    ) 

    return manager 
}() 

的問題是,我不使用這個唯一的人,而且也沒有辦法,我靜態設置每個人的服務器信息在那裏。不是每個人的服務器都將是「my.on-prem-server.com」

我有一個名爲「allowUntrustedURL」的字符串變量,它從viewWillAppear()(他們在不同的視圖中輸入他們的服務器信息) ,但是當我嘗試

let serverTrustPolicies: [String: ServerTrustPolicy] = [ 
     allowUntrustedURL: .disableEvaluation    
    ] 

我得到以下錯誤:Instance member 'allowUntrustedURL' cannot be used on type 'myViewController'

所以我想我願意選項。我想要讓人們下載他們的SSL證書並將其安裝到鑰匙串 - 但我認爲我寧願有一個複選框來儘可能地禁用該要求。

對於全局禁用Alamofire的可信SSL要求(最好在選中某個框或允許不受信任的情況之後),或者傳入一個變量的方法,我可以用它們的URL填充它們,重新填寫內容。

編輯:我也嘗試了一些通配符在URL中,我似乎無法得到任何通配符或全局津貼的工作。

回答

0

嘗試製作serverTrustPolicies a var並使用類似viewDidLoad的方法對其進行初始化。 我認爲你的問題是serverTrustPolicies尚未提供,當你試圖訪問它。

+0

我實際上是在全局定義它,並且已經將其填充到'viewDidLoad'中,所以它應該是可用的,並且它應該有數據。 我認爲這是更多的數據類型/屬性與值等問題。我只是還不知道有關不同的數據類型還沒有把我的手指放在它上面..這是我的第一個快速項目。 編輯:我誤讀,雖然我們正在談論服務器變量。讓我試試看。 –

+0

@MikeLevenick有用嗎? –

+0

不幸的是,沒有。我想我可能只是切換回內置的HTTP請求方法。阿拉莫菲爾太棒了,但我不需要絕大多數它能夠做到的事情,這已經讓我頭疼了一陣子。 雖然我感謝你的幫助。 –