Поиск сертификата на iOS

Обратите внимание, что этот вопрос был задан в 2001 году. Все изменилось.

У меня есть устройство iOS, которому требуется доступ к Junos VPN. Непрозрачные инструкции от администратора Junos говорят, что я должен получить сертификат, который был предоставлен устройству с помощью Apple IPCU. Я знаю, что сертификат находится на устройстве (я вижу его в настройках), и я могу получить доступ к VPN через Mail, Safari и приложение Junos.

В документах Apple указано, что каждое приложение имеет свою собственную связку ключей, и все же все три приложения могут видеть сертификат. Тот факт, что Jusos может получить доступ к сертификату, предоставленному IPCU, означает, что любое приложение может получить доступ к этому сертификату. Однако, когда я пытаюсь найти его:

    CFTypeRef   certificateRef = NULL;                                                  // will hold a ref to the cert we're trying to retrieve
const char *certLabelString = "myCertificateName";                                      // c string of the certificate we're searching for.
CFStringRef certLabel = CFStringCreateWithCString( NULL, certLabelString, kCFStringEncodingUTF8); // the search we need - a string match for a UTF8 String.

const void *keys[] =   { kSecClass, kSecAttrLabel, kSecReturnRef };
const void *values[] = { kSecClassCertificate, certLabel, kCFBooleanTrue };
CFDictionaryRef dict = CFDictionaryCreate(NULL, keys, values, 3, NULL, NULL);       // set up a search to retrieve this certificate.
OSStatus status = SecItemCopyMatching(dict, &certificateRef);                               // Search the keychain, returning in dict

if(status != errSecSuccess)
    NSLog(@"keychain find returned %ld", status);

if(dict)
    CFRelease(dict);

Это терпит неудачу. Мои вопросы:

  • Этот код правильный? На самом деле я знаю, что это не так, потому что SecItemCopyMatching возвращает errSecItemNotFound

  • Какое значение я должен использовать для certLabelString - я предполагаю, что имя, понятное человеку, отображается в настройках.

В настройках сертификат выглядит так (к сожалению, запутан до смерти), текст поиска, который я указываю, точно соответствует тексту, показанному в настройках.

альтернативный текст

Перекрестная публикация на форумах разработчиков Apple


person Rog    schedule 07.12.2010    source источник
comment
Мне нужно запросить сертификат из цепочки для ключей, вы получили? Большое тебе спасибо!   -  person    schedule 14.01.2011
comment
Теперь можно использовать удостоверения ios с SFSafariViewController (инфраструктура служб Safari)   -  person smat88dd    schedule 25.02.2016


Ответы (2)


Таким образом, ответ (на форумах Apple) заключается в том, что mail.app и Safari.app совместно используют Apple идентификатор связки ключей, и это единственная связка ключей, в которую вы можете отправить сертификаты с помощью инструмента Apple MDM. Любой, кто сталкивается с этим, должен заявить о дефекте, чтобы побудить Apple поступать правильно.

person Rog    schedule 10.12.2010
comment
Обратите внимание, что этот ответ вполне может быть устаревшим. - person Rog; 28.08.2014
comment
Дополнительная информация об этой технической заметке Apple: developer.apple.com/library/ ios/qa/qa1745/_index.html - person Craig; 02.07.2015

С середины 2015 года теперь есть Safari Services framework (рядом с WKWebView и UIWebView у нас теперь есть SFSafariViewController). SFSafariViewController имеет возможность доступа к цепочке ключей Apple и, следовательно, может использовать все идентификаторы :) Очень приятно.

https://developer.apple.com/videos/play/wwdc2015/504/

https://developer.apple.com/library/ios/documentation/SafariServices/Reference/SafariServicesFramework_Ref/index.html#//apple_ref/doc/uid/TP40016218

person smat88dd    schedule 25.02.2016