Техническая поддержка Apple незамедлительно ответила мне идеальным ответом.
Во-первых, я не прав, когда говорю, что Шваб использует «самый последний промежуточный сертификат, которому доверяют на рабочем столе Mac, но еще не iPhone». Промежуточные сертификаты никогда не находятся во встроенном хранилище корневых сертификатов. Проблема в том, что большинство SSL-серверов связывают все промежуточные сертификаты, необходимые для проверки, но Schwab использует альтернативный процесс SSL, который ожидает, что вы получите промежуточный сертификат из URL-адреса. Рабочий стол Mac поддерживает выборку промежуточных сертификатов, но не текущую версию iPhone OS.
Вот суть фактического кода:
OSStatus err;
NSString * path;
NSData * data;
SecCertificateRef cert;
path = [[NSBundle mainBundle] pathForResource:@"OFX-G3" ofType:@"cer"];
assert(path != nil);
data = [NSData dataWithContentsOfFile:path];
assert(data != nil);
cert = SecCertificateCreateWithData(NULL, (CFDataRef) data);
assert(cert != NULL);
err = SecItemAdd(
(CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
(id) kSecClassCertificate, kSecClass,
cert, kSecValueRef,
nil
],
NULL
);
assert(err == noErr);
CFRelease(cert);
Предполагается, что OFX-G3.cer является промежуточным сертификатом SSL и находится в папке Resources.