Posts

Post not yet marked as solved
1 Replies
222 Views
i am having problem while using NSStream api for SSL Connection, i am getting 9806 error whenever i connect to SSL Server i am using valid p12 file. Please let me know what could be the problem?. NSString *path = [[NSBundle mainBundle] pathForResource:@"client" ofType:@"p12"]; NSData *certData = [[NSData alloc] initWithContentsOfFile:path];    NSString*host = @"some host ip";    CFStreamCreatePairWithSocketToHost(NULL,                      (__bridge CFStringRef)host, 12345,                      &readStream, &writeStream);    CFArrayRef keyref = NULL;    OSStatus sanityChesk = SecPKCS12Import((__bridge CFDataRef)certData,                        (__bridge CFDictionaryRef)[NSDictionary                                     dictionaryWithObject:@"123456"                                     forKey:(__bridge id)kSecImportExportPassphrase],                        &keyref);    if (sanityChesk != noErr) {      NSLog(@"Error while importing pkcs12 [%d]", (int)sanityChesk);    }  else     NSLog(@"Success opening p12 certificate.");    CFDictionaryRef identityDict= CFArrayGetValueAtIndex(keyref, 0);    SecIdentityRef identityRef = (SecIdentityRef)CFDictionaryGetValue(identityDict,                                     kSecImportItemIdentity);    SecCertificateRef cert = NULL;     OSStatus status = SecIdentityCopyCertificate(identityRef, &cert);     if (status)      NSLog(@"SecIdentityCopyCertificate failed.");    NSArray *myCerts = [[NSArray alloc] initWithObjects:(__bridge id)identityRef, (__bridge id)cert, nil];    NSMutableDictionary *settings =[[NSMutableDictionary alloc]init];    [settings setObject:(NSString *)NSStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString *)kCFStreamSSLLevel];    [settings setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCFStreamSSLIsServer];    [settings setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCFStreamSSLValidatesCertificateChain];    [settings setObject:(NSString *)NSStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString *)kCFStreamSSLLevel];    [settings setObject:myCerts forKey:(NSString *)kCFStreamSSLCertificates];    [settings setObject:@"some host ip :12345" forKey:(NSString *)kCFStreamSSLPeerName];    CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket,                kCFBooleanTrue);    CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket,                 kCFBooleanTrue);    CFReadStreamSetProperty((CFReadStreamRef)readStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);    CFWriteStreamSetProperty((CFWriteStreamRef)writeStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);  NSInputStream *  inputStream = (__bridge_transfer NSInputStream*)readStream;    inputStream.delegate = self;    NSOutputStream * outputStream = (__bridge_transfer NSOutputStream*)writeStream;    outputStream.delegate = self;    [inputStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL forKey:NSStreamSocketSecurityLevelKey];    [outputStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL forKey:NSStreamSocketSecurityLevelKey];    CFReadStreamSetProperty((CFReadStreamRef)inputStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);    CFWriteStreamSetProperty((CFWriteStreamRef)outputStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);    [inputStream setProperty: settings forKey: (NSString *)kCFStreamPropertySSLSettings];    [outputStream setProperty: settings forKey: (NSString *)kCFStreamPropertySSLSettings];    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];    [outputStream open];    [inputStream open];
Posted Last updated
.