我將與我們的應用程序的一些背景信息開始。由於該系統應該非常安全,公司選擇使用客戶端證書來訪問服務器。每個用戶將根據他們是否使用應用程序或Web界面獲取證書,他們將自行下載並安裝它們。訪問安裝配置文件/從應用程序內的證書
該應用程序中的系統是這樣的;用戶會嘗試連接到Web服務。初始基礎「內部」網址會因爲無法訪問而失敗,所以基本網址將更改爲需要證書的網址。當用戶沒有安裝證書時,就有一個過程可以讓用戶根據他們收到的QR碼下載他的證書。然後證書將被安裝在應用程序中,用戶可以自由訪問Web服務並使用該應用程序。
該系統工程,但它需要很多操作。
我們本:
我們希望使事情對用戶和使用應用程序的公司更容易希望有更多的控制。基本上,正在制定一個允許公司創建自己的證書的系統,他們希望使用一些管理工具來分發它。沒有太多細節,情況將是所需的證書將被安裝到iOS本身,而不是在應用程序內。
這就是問題發生的地方,我似乎無法從應用程序中訪問安裝的證書,並且不斷收到401錯誤。
我已經做了一些研究,開始它關閉,我的第一反應就是「這是行不通的」如本頁面官方開發者頁面上說:
但因爲我們希望是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服務嗎?
如果是的話,長版本: 如何?
當你說安裝的證書時,你是什麼意思?您的MDM配置文件是什麼樣子的? – dgatwood
沒關係。我很確定客戶端證書只能在Mobile Safari中使用。 – dgatwood