2013-04-09 193 views
0

我正在iOS應用程序中工作。 我試圖連接到https服務器與NSStream連接。 隨着NSURLConnection,這項工作很好,我可以信任這樣的挑戰:SSL流套接字連接

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

} 

但我的問題是,僅在流中可用的委託:

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

} 

如何管理呢?

回答

0

我終於找到了解決方案。感謝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使用身份設置,通常私鑰將可用於流。

希望得到這個幫助