Apple 技术支持及时回复了我一个完美的答案。
首先,我说施瓦布使用“在 Mac 桌面上受信任但在 iPhone 上不受信任的最新中间证书”是不正确的。中间证书永远不会在内置根证书存储中。问题是大多数 SSL 服务器捆绑了验证所需的所有中间证书,但 Schwab 使用备用 SSL 过程,希望您从 URL 获取中间证书。Mac 桌面支持中间证书获取,但不支持当前的 iPhone 操作系统。
这是实际代码的要点:
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 文件夹中。