当前位置:  开发笔记 > 后端 > 正文

在iPhone SDK下导入SSL证书

如何解决《在iPhoneSDK下导入SSL证书》经验,为你挑选了1个好方法。

我的应用程序连接到施瓦布OFX服务器使用NSURLConnection.不幸的是,服务器使用了最新的中间证书,该证书在Mac桌面上是可信任的,但还不是iPhone.(尝试使用URL - 您将在iPhone上获得证书错误.)

没有简单的方法可以NSURLConnection忽略我所知道的无效证书.因此,我试图手动将证书导入Keychain并设置其信任级别,但我遇到了阻塞.

SecCertificateCreateWithData成功调用从.cer文件导入证书.然后在桌面上我会调用SecTrustSettingsSetTrustSettings,但iPhone SDK中不存在.

任何解决方法?



1> Adam Ernst..:

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);

这假定OFX-G3.cer是中间SSL证书,位于Resources文件夹中.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有