2016-09-16 29 views
0

我將與我們的應用程序的一些背景信息開始。由於該系統應該非常安全,公司選擇使用客戶端證書來訪問服務器。每個用戶將根據他們是否使用應用程序或Web界面獲取證書,他們將自行下載並安裝它們。訪問安裝配置文件/從應用程序內的證書

該應用程序中的系統是這樣的;用戶會嘗試連接到Web服務。初始基礎「內部」網址會因爲無法訪問而失敗,所以基本網址將更改爲需要證書的網址。當用戶沒有安裝證書時,就有一個過程可以讓用戶根據他們收到的QR碼下載他的證書。然後證書將被安裝在應用程序中,用戶可以自由訪問Web服務並使用該應用程序。

該系統工程,但它需要很多操作。

我們本:

我們希望使事情對用戶和使用應用程序的公司更容易希望有更多的控制。基本上,正在制定一個允許公司創建自己的證書的系統,他們希望使用一些管理工具來分發它。沒有太多細節,情況將是所需的證書將被安裝到iOS本身,而不是在應用程序內。

這就是問題發生的地方,我似乎無法從應用程序中訪問安裝的證書,並且不斷收到401錯誤。

我已經做了一些研究,開始它關閉,我的第一反應就是「這是行不通的」如本頁面官方開發者頁面上說:

In iOS, an app can access only its own items in the keychain—the user is never asked for permission or for a password.

但因爲我們希望是100%肯定,我一直在繼續尋找了一段時間,最終跑進類似的代碼示例:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 
{ 
    SecTrustRef trust = challenge.protectionSpace.serverTrust; 
    NSURLCredential *credential = [NSURLCredential credentialForTrust:trust]; 
    [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; 
} 

但是,這似乎並沒有得到任何安裝的證書或任何東西。

以下布爾也被設置:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace; 
{ 
    return YES; 
} 

- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection; 
{ 
    return YES; 
} 

做一些進一步檢查應用程序本身之外,我已經看過了iPad上我們這裏。它具有爲網站安裝的證書(與應用程序不同的權限),在Safari上我可以訪問受證書保護的網站。但是,在Chrome和Firefox上,我會錯誤地發現網站需要證書。因此,這使我相信,除非您基本上是Apple應用程序,否則訪問這些證書確實是不可能的。

所以基本上,我在這個問題上的智慧結束。此問題的簡短版本: 我可以從我的應用程序訪問iPhone上安裝的客戶端證書以訪問需要此證書的Web服務嗎?

如果是的話,長版本: 如何?

+0

當你說安裝的證書時,你是什麼意思?您的MDM配置文件是什麼樣子的? – dgatwood

+0

沒關係。我很確定客戶端證書只能在Mobile Safari中使用。 – dgatwood

回答

0

如果我是你,我會使用託管應用程序配置將一組自定義首選項推送到應用程序,並使用它提供可下載客戶端證書的URL。第一次請求後,在服務器上刪除它。

+0

至少暫時下載已經完成。這與您的建議有些類似,除了用戶將使用QR碼重定向到服務器。之後,證書將被存檔。這主要是這樣做的,因爲派發QR碼的實例想要控制這個。 這確實仍然是一種選擇,並且會需要更少的用戶本身,但這仍然意味着您依賴應用程序中的證書。 但看起來這是用戶/公司必須忍受的限制。 – Kevin

+0

是的。不幸的是,添加全球共享鑰匙串項目並不是Apple重新設計iOS的鑰匙串時所預想的用例。除非Apple明確添加了通過配置文件或通過MDM將項目添加到特定應用程序鑰匙串的機制,否則您幾乎停滯不前。我會建議提交一個增強請求雷達要求這樣的功能。 – dgatwood

+0

好的,謝謝你的洞察力。我將把這個答案作爲接受的答案,因爲它基本上回答了iOS鑰匙串是否可用於應用程序的問題,並給出了另一種下載證書的方法:) – Kevin

相關問題