title: Add SSL to iOS Application Sync
body: <p>I'm syncing my Mac application with my iPhone application using NSStream and am trying to encrypt the communication with SSL.  I've tried to run <code>CFReadStreamSetProperty(readStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings)</code> on the iPhone side and    <code>CFWriteStreamSetProperty(writeStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings)</code> on the Mac side when I set up the NSInputStream and NSOutputStream respectively.  For the settings dictionary, I'm following the advice of <a href="http://iphonedevelopment.blogspot.com/2010/05/nsstream-tcp-and-ssl.html" rel="nofollow">http://iphonedevelopment.blogspot.com/2010/05/nsstream-tcp-and-ssl.html</a> and ignoring the properties of the certificate.  However, encrypting it in this way doesn't seem to work as the transfer does not go through - is there something else I need to do to get this functionality working?</p>
  
  <p>Thanks!</p>
  
  <p>EDIT: Here's some code:</p>
  
  <p>On the Mac:</p>
  
  <pre><code>NSOutputStream *outStream;
  [service getInputStream:nil outputStream:&amp;outStream];
  [outStream open];
  
  [outStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL 
  forKey:NSStreamSocketSecurityLevelKey];  
  
          NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
  [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
  [NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
  [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
  kCFNull,kCFStreamSSLPeerName, nil];
  
  CFWriteStreamSetProperty((CFWriteStreamRef)outStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
  
  int bytes = [outStream write:[rawPacket bytes] maxLength:[rawPacket length]];
  [outStream close];
  </code></pre>
  
  <p>On the iPhone:</p>
  
  <pre><code>CFReadStreamRef readStream;
  
  
  NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"file"];
  
  NSOutputStream *fileStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:NO];
  
  [fileStream open];
  
  
  CFStreamCreatePairWithSocket(NULL, fd, &amp;readStream, NULL);
  
  NSInputStream *networkStream = (NSInputStream *) readStream;
  
  CFRelease(readStream);
  
  [networkStream setProperty:(id)kCFBooleanTrue forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
  
  networkStream.delegate = self;
  [networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
  
  [networkStream open];
  
  [self.networkStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL 
                          forKey:NSStreamSocketSecurityLevelKey];
  
  NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
  [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
  [NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
  [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
  kCFNull,kCFStreamSSLPeerName, nil];
  
  CFReadStreamSetProperty((CFReadStreamRef)self.networkStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
  </code></pre>