Я пытаюсь реализовать аутентификацию сертификата в клиенте ActiveSync, который я разрабатываю. Код для использования аутентификации сертификата может работать, но на данный момент сервер, или, точнее, интерпретация ответа сервера библиотекой iOS, кажется мне неправильной. Вот мой код:
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];
NSString *authenticationMethod = [protectionSpace authenticationMethod];
if ([authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate])
{
NSURLCredential* credential = [ self buildCredentialClientCert];
if ( credential == nil )
{
[[challenge sender] cancelAuthenticationChallenge:challenge];
}
else
{
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
}
else if ([authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
.... // do other stuff
Проблема в том, что хотя я знаю, что сервер поддерживает аутентификацию сертификата клиента, когда я устанавливаю точку останова, authenticationMethod
всегда устанавливается на NSURLAuthenticationMethodServerTrust
.
Необработанный ответ HTTPS-сервера содержит следующее:
Код ошибки: 403 Запрещено. Страница требует сертификат клиента как часть процесса аутентификации. Если вы используете смарт-карту, вам нужно будет вставить ее, чтобы выбрать соответствующий сертификат. В противном случае обратитесь к администратору сервера. (12213)
Мой вопрос: что определяет, является ли вызов аутентификации NSURLAuthenticationMethodServerTrust
или NSURLAuthenticationMethodClientCertificate
?