Ada*_*nst 9 iphone cocoa cocoa-touch keychain
我的应用程序连接到施瓦布OFX服务器使用NSURLConnection.不幸的是,服务器使用了最新的中间证书,该证书在Mac桌面上是可信任的,但还不是iPhone.(尝试使用URL - 您将在iPhone上获得证书错误.)
没有简单的方法可以NSURLConnection忽略我所知道的无效证书.因此,我试图手动将证书导入Keychain并设置其信任级别,但我遇到了阻塞.
我SecCertificateCreateWithData成功调用从.cer文件导入证书.然后在桌面上我会调用SecTrustSettingsSetTrustSettings,但iPhone SDK中不存在.
任何解决方法?
Ada*_*nst 12
Apple技术支持及时回复了我的完美答案.
首先,我说Schwab使用的是"最新的中间证书,在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);
Run Code Online (Sandbox Code Playgroud)
这假定OFX-G3.cer是中间SSL证书,位于Resources文件夹中.