Apple のテクニカル サポートは、完璧な回答で迅速に対応してくれました。
まず、Schwab が「Mac デスクトップでは信頼されているが、iPhone ではまだ信頼されていないごく最近の中間証明書」を使用しているというのは誤りです。中間証明書は、組み込みのルート証明書ストアにはありません。問題は、ほとんどの SSL サーバーが検証に必要なすべての中間証明書をバンドルすることですが、Schwab は URL から中間証明書を取得することを期待する代替 SSL プロセスを使用します。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 フォルダーにあることを前提としています。