Lod*_*oda 9 ssl https objective-c asihttprequest ios5
我有一个使用ASIHTTPRequest的应用程序.
我用iOS 5(sdk:5.0/xcode:4.2 Build 4D199)重新编译了我的应用程序,https连接失败并显示错误消息(与https禁用的同一调用工作正常):
Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xa8e66e0 {NSUnderlyingError=0xa8ac6c0 "The operation couldn’t be completed. (OSStatus error -9844.)", NSLocalizedDescription=A connection failure occurred}
Run Code Online (Sandbox Code Playgroud)
启用调试日志:
[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xd96fc00>
[CONNECTION] Request <ASIFormDataRequest: 0xd96fc00> will not use a persistent connection
[STATUS] Request <ASIFormDataRequest: 0xd96fc00>: Failed
[CONNECTION] Request #(null) failed and will invalidate connection #(null)
Run Code Online (Sandbox Code Playgroud)
我找到了这个相关的帖子:https: //devforums.apple.com/message/537440#537440 这可以解释我的问题.
基于iOS 5更喜欢TLS 1.2的想法,我尝试在AIHTTPRequest.m中更改设置kCFStreamSocketSecurityLevelTLSv1
NSDictionary *sslProperties = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
kCFStreamSSLAllowsExpiredCertificates,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
kCFNull,kCFStreamSSLPeerName,
kCFStreamSocketSecurityLevelTLSv1, kCFStreamSSLLevel,// my modif
nil];
Run Code Online (Sandbox Code Playgroud)
没有成功.也许我的修改不正确?
细节:
我不知道问题是证书故事(如TLS版本)还是别的.
欢迎任何帮助/想法!
在我们的设置上,问题是通过插入修复
[sslProperties setObject:(NSString *)kCFStreamSocketSecurityLevelSSLv3 forKey:(NSString *)kCFStreamSSLLevel];
Run Code Online (Sandbox Code Playgroud)
就在上面
CFReadStreamSetProperty((CFReadStreamRef)[self readStream], kCFStreamPropertySSLSettings, sslProperties);
Run Code Online (Sandbox Code Playgroud)
在Handle SSL证书设置部分.
编辑: 根据http://developer.apple.com/library/ios/#technotes/tn2287/_index.html#//apple_ref/doc/uid/DTS40011309,以下内容应该更加健壮
[sslProperties setObject:@"kCFStreamSocketSecurityLevelTLSv1_0SSLv3" forKey:(NSString *)kCFStreamSSLLevel];
Run Code Online (Sandbox Code Playgroud)
这是最终的解决方案:
NSDictionary *sslProperties = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
kCFNull,kCFStreamSSLPeerName,
@"kCFStreamSocketSecurityLevelTLSv1_0SSLv3", kCFStreamSSLLevel,
nil];
Run Code Online (Sandbox Code Playgroud)
添加此参数:
@"kCFStreamSocketSecurityLevelTLSv1_0SSLv3", kCFStreamSSLLevel,
Run Code Online (Sandbox Code Playgroud)
看起来ASIHTTPRequest正在被放弃.并且当前版本在iOS 5中出现问题.
http://groups.google.com/group/asihttprequest/browse_thread/thread/7731197dbe71c260
他们建议搬到NSURLConnection.
| 归档时间: |
|
| 查看次数: |
13415 次 |
| 最近记录: |