我正在使用NSStream将我的Mac应用程序与我的iPhone应用程序同步,并试图使用SSL加密通信。我试着在iPhone端运行CFReadStreamSetProperty(readStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings)
,在Mac端运行CFWriteStreamSetProperty(writeStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings)
,分别设置NSInputStream和NSOutputStream。对于设置字典,我遵循http://iphonedevelopment.blogspot.com/2010/05/nsstream-tcp-and-ssl.html的建议并忽略了证书的属性。但是,以这种方式对它进行加密似乎没有效果,因为传输没有经过 - 还有其他事情我需要做以获得此功能的工作吗?将SSL添加到iOS应用程序同步
谢谢!
编辑:下面是一些代码:
在Mac上:
NSOutputStream *outStream;
[service getInputStream:nil outputStream:&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];
在iPhone上:
CFReadStreamRef readStream;
NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"file"];
NSOutputStream *fileStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:NO];
[fileStream open];
CFStreamCreatePairWithSocket(NULL, fd, &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);
“转移不通过”?你有什么错误吗?日志? – prakash
@Prakash在mac上它写入“-1字节”,并在iPhone上停止状态为“Stream open error”的接收。 – PF1
@Prakash - 这里要提到一件事。如果您打算使用SSL,则必须填写符合加密标准的导出规则!即使使用iOS的内置SSL功能,您也需要获得美国政府的出口合规性。检查这个问题:http://stackoverflow.com/questions/2128927/using-ssl-in-an-iphone-app-export-compliance – Chris