يعمل الكاكاو nsstream مع SSL ، مع Socks5 ، ولكن ليس في نفس الوقت
سؤال
عند الاتصال (إلى FTP ، في البداية بدون SSL) أقوم بتشغيل:
NSArray *objects = [NSArray arrayWithObjects:@"proxy.ip", [NSNumber numberWithInt:1080], NSStreamSOCKSProxyVersion5, @"user", @"pass", nil];
NSArray *keys = [NSArray arrayWithObjects:NSStreamSOCKSProxyHostKey, NSStreamSOCKSProxyPortKey, NSStreamSOCKSProxyVersionKey, NSStreamSOCKSProxyUserKey, NSStreamSOCKSProxyPasswordKey, nil];
NSDictionary *proxyDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream setProperty:proxyDictionary forKey:NSStreamSOCKSProxyConfigurationKey];
[iStream open];
نفس الشيء عن Istream. هذا يسمح لي بالاتصال بنجاح من خلال وكيل Socks5. إذا واصلت بدون setProperty: ProxyDictionary ... (تعطيل Socks5) ، أود أن أخبر الخادم بالتبديل إلى SSL ، ثم تطبيق هذه الإعدادات بنجاح على تدفقات In/الإخراج ، وبالتالي منحني اتصال SSL:
NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:1];
[settings setObject:(NSString *)NSStreamSocketSecurityLevelTLSv1 forKey:(NSString *)kCFStreamSSLLevel];
// to allow selfsigned certificates:
[settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamSetProperty((CFReadStreamRef)iStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
//[iStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey]; <-- needs to be default or unset, then it works.
نفس الشيء بالنسبة لـ Ostream. كل ذلك يعمل بشكل جيد إذا قمت بتعطيل Socks5. إذا قمت بتشغيله (السطر 7 في القناصة الأولى) فقدت الاتصال عند تطبيق إعدادات SSL.
إذا اضطررت إلى تخمين ، أعتقد أنه يفقد بعض الخصائص عند تطبيق "الإعدادات" (SSL)؟
الرجاء المساعدة :)
- إيفان
المحلول
كان الحل في مشكلة مع اتصال NSStream SSL, ، لا ينبغي علي تعيين مستوى الأمان. لقد قمت بتحرير مشاركتي أعلاه إلى حل العمل.
لا تنتمي إلى StackOverflow