SSL and NSStream



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

[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);

但是请记住,当您以这种方式使用它时,没有太多的身份验证和防止中间人的保护。尝试使用设置来处理其他问题。

相关内容

  • 没有找到相关文章

最新更新