iphone - SecTrustCreateWithCertificates 在 iPad 上崩溃

标签 iphone security ipad certificate public-key

我正在尝试使用 iOS 安全框架与我的服务器安全地通信。我有一个证书文件,可以从中获取公钥引用。这就是我正在做的事情。

 NSString *certPath    = [[NSBundle mainBundle] pathForResource:@"supportwarriors.com" ofType:@"cer"];
 SecCertificateRef myCertificate = nil;

 NSData *certificateData   = [[NSData alloc] initWithContentsOfFile:certPath]; 
 myCertificate     = SecCertificateCreateWithData(kCFAllocatorDefault, (CFDataRef)certificateData);

 //got certificate ref..Now get public key secKeyRef reference from certificate..
 SecPolicyRef myPolicy   = SecPolicyCreateBasicX509();
 SecTrustRef myTrust;
 OSStatus status     = SecTrustCreateWithCertificates(myCertificate,myPolicy,&myTrust);  

    SecTrustResultType trustResult;
    if (status == noErr) {
        status = SecTrustEvaluate(myTrust, &trustResult);  
    }
 publicKey      = SecTrustCopyPublicKey(myTrust);

上面的代码在 iPhone 上完美运行,并且我已经测试过了。我能够与我的服务器安全地通信。但是当我尝试在 iPad 上运行我的应用程序(2x 模式)时,上面的代码崩溃了。调试后,我发现 secTrustCreateWithCertificate 崩溃了,崩溃日志如下。我使用的证书对于 iPad 和 iPhone 都是相同的...上面的 secCertificateCreateWithData 函数返回一个证书引用并且不为零...所以那就是不是崩溃的原因..我做错了什么。

*** -[NSCFType count]: unrecognized selector sent to instance 0x14af24
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***      -[NSCFType count]: unrecognized selector sent to instance 0x14af24'

最佳答案

SecTrustCreateWithCertificates 的文档声称您可以传递单个证书或数组。您收到的异常指出-[NSCFType count]:无法识别的选择器发送到实例。 iOS 3.2 中发生的情况是,SecTrustCreateWithCertificates 将输入值视为 CFArray,而不首先检查它是否是单个 SecCertificateRef

要解决此问题,您可以执行类似于以下代码的操作:

    SecCertificateRef certs[1] = { certificate };
    CFArrayRef array = CFArrayCreate(NULL, (const void **) certs, 1, NULL);
    if(SecTrustCreateWithCertificates(array, x509Policy, &trustChain) == errSecSuccess)

只需记住在适当的范围内使用CFRelease(array)即可。

关于iphone - SecTrustCreateWithCertificates 在 iPad 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996658/

相关文章:

ios - 找不到 'NSFetchedResultsControllerDelegate' 的协议(protocol)声明

ios - 自定义选项卡栏上的更多菜单

iphone - 从枚举类型 'UIBarButtonSystemItem' 到不同枚举类型 'UIBarButtonItemStyle' 的隐式转换 - iPad - iOS5

security - 盐的目的是什么?

java - 在公共(public)/不安全的网络上使用纯文本密码提交代码有多危险?如何正确处理代码中的密码?

ios - 无法将 UIButton 添加到 UIScrollView

iphone - Apple 是否解决了应用内购买收据验证的安全问题?

asp.net - 监控 ASP.NET 和 SQL Server 以确保安全

iOS AIR 应用程序在关闭条形码读取器 ANE 后未获取用户输入

c++ - Qt Ui 应用程序屏幕方向