我的 iPhone 应用程序仅因为使用(看起来非常安全)私有方法+setAllowsAnyHTTPSCertificate:forHost:
而被拒绝NSURLRequest
。是否有模拟此功能的非私有 API?
问问题
18129 次
5 回答
7
似乎有一个公共 API ;) 如何使用 NSURLConnection 与 SSL 连接以获得不受信任的证书?
于 2010-01-27T08:23:25.130 回答
6
实际上,我正在使用 10.6.8 进行测试,这段代码仍然有效——它使用私有 API,但检查选择器是否存在(myurl 是我试图加载到 WebView 或 NSURLConnection 的 NSURL):
SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
IMP fp;
fp = [NSURLRequest methodForSelector:selx];
(fp)([NSURLRequest class], selx, YES, [myurl host]);
}
请注意,没有使用“@selector”,因此绝对所有工作都将在运行时完成。这使得它尽可能地安全,并且尽可能地隐藏在 Apple 的检查中,尤其是在您隐藏字符串的情况下。
于 2011-09-14T21:07:16.853 回答
1
一个非常愚蠢的解决方法是创建自己的类别方法:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
这应该通过 Apple 的私有 API 检查获得,但它仍然是相同的(使用随时可能中断的私有、未记录的 API[1])。实际上,更糟糕的是,它允许一切,而不仅仅是那个主机。
[1]:应该公开的私有 API,但仍然是私有 API。
于 2010-01-04T21:10:09.507 回答
0
不是解决方案,而是建议。您是否考虑过为此使用ASIHttpRequest 框架?这个框架在各个方面都是完整的。检查文档,也许它也可以帮助你。
于 2010-01-05T12:22:33.740 回答
0
setAllowsAnyHTTPSCertificate 现在似乎在 OS X 10.6.6 中完全不受支持。
我说的是 10.6.6 吗?也许我应该说“雪景”。
于 2011-01-06T23:25:35.893 回答