【问题标题】:SSL in stream socket connection流套接字连接中的 SSL
【发布时间】:2013-04-09 07:32:54
【问题描述】:

我在iOS 应用程序中工作。 我正在尝试使用NSStream 连接连接到https 服务器。 使用NSURLConnection,这项工作很好,我可以相信这样的挑战:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

}

但我的问题是 Stream 中唯一可用的委托是:

- (void) stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {

} 

如何管理这个?

【问题讨论】:

    标签: ios ssl https nsstream


    【解决方案1】:

    我终于找到了解决办法。感谢Wireshark

            [inStream setProperty:(id)kCFBooleanFalse forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
            [outStream setProperty:(id)kCFBooleanFalse forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
            NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:1];
            [settings setObject:_certificates forKey:(id)kCFStreamSSLCertificates];
            [settings setObject:(NSString *)NSStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString *)kCFStreamSSLLevel];
            [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
            [settings setObject:@"MY HOST" forKey:(NSString *)kCFStreamSSLPeerName];
    
            CFReadStreamSetProperty((CFReadStreamRef)inStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
            CFWriteStreamSetProperty((CFWriteStreamRef)outStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
    

    最重要的是设置没有当前证书的证书。 您应该在链中设置当前身份和其他证书。 这应该由 iOSX 使用 Identity 设置,并且通常私钥可用于流。

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 2011-04-17
      • 2013-10-14
      • 2016-08-19
      • 2015-11-12
      • 2014-06-30
      • 1970-01-01
      • 2011-02-09
      • 2014-05-09
      相关资源
      最近更新 更多