Ios 流中SSL套接字连接

Ios 流中SSL套接字连接,ios,ssl,https,nsstream,Ios,Ssl,Https,Nsstream,我在iOS应用程序中工作。 我正在尝试使用NSStream连接连接到https服务器。 有了NSURLConnection,这项工作很好,我可以信任这样的挑战: -(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { } 但我的问题是流中唯一可用的代理是: - (void) stream:(NSSt

我在
iOS
应用程序中工作。 我正在尝试使用
NSStream
连接连接到
https
服务器。 有了
NSURLConnection
,这项工作很好,我可以信任这样的挑战:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

}
但我的问题是流中唯一可用的代理是:

- (void) stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {

} 

如何管理

我终于找到了解决办法。多亏了
Wireshark

        [inStream setProperty:(id)kCFBooleanFalse forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
        [outStream setProperty:(id)kCFBooleanFalse forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
        NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:1];
        [settings setObject:_certificates forKey:(id)kCFStreamSSLCertificates];
        [settings setObject:(NSString *)NSStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString *)kCFStreamSSLLevel];
        [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
        [settings setObject:@"MY HOST" forKey:(NSString *)kCFStreamSSLPeerName];

        CFReadStreamSetProperty((CFReadStreamRef)inStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
        CFWriteStreamSetProperty((CFWriteStreamRef)outStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
最重要的是设置没有当前证书的证书。 您应该设置链中的当前标识和其他证书。 这应该由iOSX使用Identity设置,并且通常私有密钥将可用于流

希望这有帮助