Я работаю в приложении iOS
. Я пытаюсь подключиться к серверу https
с подключением NSStream
. С NSURLConnection
это работает отлично, и я могу доверять этой задаче:
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
}
Но моя проблема в том, что единственный доступный в Stream делегат:
- (void) stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
}
Как с этим справиться?
1 ответ
Наконец-то я нашел решение. Спасибо 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, и обычно закрытый ключ будет доступен для потока.
Надеюсь на эту помощь
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.