Начнем с некоторых справочной информацией о нашем приложении:Доступа установленных профилей/сертификаты из приложения
Наших IOS приложение подключается к вебу-сервисам, которые в большинстве случаев требуют (за исключением несколько белых списка IP-адресов) аутентификаций , Поскольку эта система должна быть невероятно безопасной, компания решила использовать клиентские сертификаты для доступа к серверу. Каждый пользователь получит сертификат, созданный на основе того, будут ли они использовать приложение или веб-интерфейс, который им придется загружать и устанавливать самостоятельно.
Система, которая была на месте в приложении, была такой; пользователь попытается подключиться к веб-службам. Исходный базовый «внутренний» URL-адрес будет терпеть неудачу, поскольку у них нет доступа к нему, поэтому базовый URL-адрес изменится на URL-адрес, требующий сертификата. Когда у пользователя нет установленного сертификата, существует процесс, который позволит пользователю загрузить его сертификат на основе полученного QR-кода. Затем сертификат будет установлен в приложении, и пользователь может свободно обращаться к веб-службам и использовать приложение.
Эта система работает, но для этого требуется много действий.
Сейчас в настоящее время:
Мы хотим сделать вещи проще на пользователей и компаний, использующих приложения хотят иметь немного больше контроля. В основном разрабатывается система, которая позволит компаниям создавать свои собственные сертификаты, и они хотят распространять ее с помощью некоторых инструментов управления. Не заходя слишком далеко в детали, ситуация будет заключаться в том, что требуемый сертификат будет установлен на 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 из своего приложения, чтобы получить доступ к веб-службам, требующим этого сертификата?
И если да, то длинная версия: Как?
Что вы имеете в виду, когда говорите установленный сертификат? Как выглядит ваш профиль MDM? – dgatwood
Ничего. Я уверен, что сертификаты клиентов работают только в Mobile Safari. – dgatwood