Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 4th, 2012  |  syntax: None  |  size: 3.63 KB  |  hits: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. kCFStreamPropertySocketSecurityLevel to kCFStreamSocketSecurityLevelNegotiatedSSL causes OSStatus errSSLXCertChainInvalid (-9807) connecting to Java
  2. System.setProperty("javax.net.ssl.keyStore", "../../pki/z-keystore.jks");
  3.   System.setProperty("javax.net.ssl.keyStorePassword", "ZZZZZZ");
  4.   System.setProperty("javax.net.debug", "all");
  5.  
  6.   ServerSocketFactory serverSocketFactory = SSLServerSocketFactory
  7.     .getDefault();
  8.   ServerSocket serverSocket = serverSocketFactory
  9.     .createServerSocket(8443);
  10.  
  11.   System.out.println("Waiting for connections on 8443");
  12.   final AtomicInteger nextSocketId = new AtomicInteger();
  13.   while (true) {
  14.    final Socket socket = serverSocket.accept();
  15.    new Thread(new Runnable() {
  16.     @Override
  17.     public void run() {
  18.      final int socketId = nextSocketId.getAndIncrement();
  19.  
  20.      try {
  21.       System.out.println("Received connection from socketId: " + socketId);
  22.       BufferedReader bufferedReader = new BufferedReader(
  23.         new InputStreamReader(socket.getInputStream()));
  24.       PrintWriter printWriter = new PrintWriter(
  25.         new OutputStreamWriter(socket.getOutputStream()));
  26.  
  27.       for (String line = bufferedReader.readLine(); line != null; line = bufferedReader
  28.         .readLine()) {
  29.        System.out.println("Read: " + line);
  30.        printWriter.println("Read: " + line);
  31.       }
  32.  
  33.       bufferedReader.close();
  34.       printWriter.close();
  35.      } catch (SSLHandshakeException e) {
  36.       // don't care
  37.      } catch (Exception e) {
  38.       e.printStackTrace();
  39.      }
  40.  
  41.      System.out.println("Closed connection from socketId: " + socketId);
  42.     }
  43.    }).start();
  44.  
  45.   }
  46.        
  47. - (void) connectSecurely {
  48.  CFReadStreamRef readStream;
  49.  CFWriteStreamRef writeStream;
  50.  CFStreamCreatePairWithSocketToHost(NULL,
  51.             (CFStringRef)@"mcheath.local",
  52.             8443,
  53.             &readStream,
  54.             &writeStream);
  55.  
  56.  NSDictionary *sslSettings = [NSDictionary dictionaryWithObjectsAndKeys:
  57.          (id)kCFBooleanFalse, (id)kCFStreamSSLValidatesCertificateChain,
  58.          nil];
  59.  
  60.  CFReadStreamSetProperty(readStream,
  61.        kCFStreamPropertySSLSettings,
  62.        sslSettings);
  63.  
  64.  /* Turning on this setting makes the SSL handshake fail with OSStatus -9807 */
  65.  CFReadStreamSetProperty(readStream,
  66.        kCFStreamPropertySocketSecurityLevel,
  67.        kCFStreamSocketSecurityLevelNegotiatedSSL);
  68.  
  69.  self.inputStream = (NSInputStream *)readStream;
  70.  self.outputStream = (NSOutputStream *)writeStream;
  71.  [self.inputStream setDelegate:self];
  72.  [self.outputStream setDelegate:self];
  73.  
  74.  [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
  75.         forMode:NSDefaultRunLoopMode];
  76.  [self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
  77.          forMode:NSDefaultRunLoopMode];
  78.  
  79.  CFReadStreamOpen(readStream);
  80.  CFWriteStreamOpen(writeStream);
  81.     }
  82.  
  83.     #pragma mark -
  84.     #pragma mark NSStreamDelegate
  85.  
  86.     - (void)stream:(NSStream *)aStream
  87.        handleEvent:(NSStreamEvent)eventCode {
  88.  switch (eventCode) {
  89.   case NSStreamEventNone:
  90.    NSLog(@"NSStreamEventNone");
  91.    break;
  92.   case NSStreamEventOpenCompleted:
  93.    NSLog(@"NSStreamEventOpenCompleted");
  94.    break;
  95.   case NSStreamEventHasBytesAvailable:
  96.    NSLog(@"NSStreamEventHasBytesAvailable");
  97.    break;
  98.   case NSStreamEventHasSpaceAvailable:
  99.    NSLog(@"NSStreamEventHasSpaceAvailable");
  100.    break;
  101.   case NSStreamEventErrorOccurred:
  102.    NSLog(@"NSStreamEventErrorOccurred: %@", [aStream streamError]);
  103.    NSLog(@"SSL Settings: %@", [aStream propertyForKey:(NSString *) kCFStreamPropertySSLSettings]);
  104.    break;
  105.   case NSStreamEventEndEncountered:
  106.    NSLog(@"NSStreamEventEndEncountered");
  107.    break;
  108.   default:
  109.    break;
  110.  }
  111.     }
  112.        
  113. errSSLXCertChainInvalid     = -9807,    /* Invalid certificate chain */