Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @try
- {
- NSString *certificatePath = [[NSBundle mainBundle]pathForResource:@"server" ofType:@"p12"];
- NSData *certicateData = [NSData dataWithContentsOfFile:certificatePath];
- CFArrayRef keyRef;
- OSStatus status =SecPKCS12Import((__bridge CFDataRef)certicateData,(__bridge CFDictionaryRef)@{(__bridge NSString*)kSecImportExportPassphrase :@"*********"}, &keyRef);
- if(status!=noErr)
- {
- NSLog(@"PKCS12 import error %i",(int)status);
- return;
- }
- CFDictionaryRef identityDict=CFArrayGetValueAtIndex(keyRef, 0);
- SecIdentityRef identityRef=(SecIdentityRef)CFDictionaryGetValue(identityDict, kSecImportItemIdentity);
- SecCertificateRef certificate;
- status = SecIdentityCopyCertificate(identityRef, &certificate);
- if (status != noErr)
- {
- NSLog(@"sec identity copy failed: %i", (int)status);
- return;
- }
- CFReadStreamRef readStream;
- CFWriteStreamRef writeStream;
- CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 8080, &readStream, &writeStream);
- NSArray *certificates = [NSArray arrayWithObjects:(__bridge id)identityRef, (__bridge id)certificate, nil];
- CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
- CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
- CFReadStreamSetProperty(readStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelNegotiatedSSL);
- CFWriteStreamSetProperty(writeStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelNegotiatedSSL);
- NSDictionary *settings = @{(id)kCFStreamSSLCertificates:certificates,
- (id)kCFStreamSSLIsServer:@YES};
- CFReadStreamSetProperty(readStream, kCFStreamPropertySSLSettings, (__bridge CFDictionaryRef)(settings));
- CFWriteStreamSetProperty(writeStream, kCFStreamPropertySSLSettings, (__bridge CFDictionaryRef)(settings));
- self.inpuStream=(__bridge NSInputStream*)readStream;
- self.outpuStream=(__bridge NSOutputStream*)writeStream;
- [self.inpuStream setDelegate:self];
- [self.outpuStream setDelegate:self];
- [self.inpuStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- [self.outpuStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- CFReadStreamOpen(readStream);
- CFWriteStreamOpen(writeStream);
- if([self.outpuStream streamStatus] == NSStreamStatusOpen)
- NSLog(@"Open (%@)",@"opened");
- else
- NSLog(@"Open (%@)",@"not opened");
- }@catch (NSException *exception)
- {
- NSLog(@"Error (%@)",exception);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement