Objective c SSL和NSStream

Objective c SSL和NSStream,objective-c,macos,nsstream,cfsocket,Objective C,Macos,Nsstream,Cfsocket,我尝试在NSStream over CFSocket连接中使用SSL。所以我写了这段代码: [self.input setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey]; [self.output setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey]; [self.in

我尝试在NSStream over CFSocket连接中使用SSL。所以我写了这段代码:

[self.input setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];
[self.output setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];

[self.input scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.output scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[self.input open];
[self.output open];
但是,如果我从curl或浏览器向服务器发送请求,则会出现以下错误:

error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
当我使用这个解决方案时,我仍然有相同的错误


如何配置流以使用ssl?

ssl/TLS有不同的版本。可能您连接的服务器无法使用TLS版本1进行通信。请为
forKey:NSStreamSocketSecurityLevelKey
尝试值
NSStreamSocketSecurityLevelNegotiatedSSL
,以获取连接的最高版本

此外,请尝试以这种方式设置SSL/TLS连接的属性

// Setting properties. Atm every certificate is accepted and no hostname will be checked
        NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
                                  [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
                                  [NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
                                  [NSNumber numberWithBool:NO],  kCFStreamSSLValidatesCertificateChain,
                                  kCFNull,kCFStreamSSLPeerName,
                                  nil];
        CFReadStreamSetProperty((CFReadStreamRef)_inputStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
        CFWriteStreamSetProperty((CFWriteStreamRef)_outputStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
但请记住,当您以这种方式使用它时,并没有太多的身份验证和保护来防止中间人。尝试使用设置来处理其他问题


此外,发布更多代码并尝试连接到另一台使用https的服务器。

如果使用NSURLConnection,您可以得到异步回调,这有点像流,特别是因为您无法真正查找该流。您是否仍然存在此问题?