使用iPhone应用程序中的CONNECT方法在SSL上实现HTTP代理



我正在开发客户端-服务器解决方案,在该解决方案中,我的iPhone应用程序使用SSL连接通过TCP/IP连接到服务器。我想确保SSL上的所有流量都通过HTTP代理服务器。

我们可以在设置->WiFi详细信息->HTTP代理(手动/自动)中指定iPhone上的HTTP代理信息。当我们这样做的时候,所有的HTTP流量都通过上面提到的代理服务器。(例如,所有safari流量,甚至所有应用程序的HTTP流量。)

但我的问题是TCP/IP上的SSL没有通过代理服务器。iPhone SDK具有kCFStreamPropertySOCKSProxy属性集,用于配置用于SOCKS使用的NSStream,如下所述,但我没有看到在CFSocket/NStream上配置HTTP代理服务器的规定。处理这个问题的最佳方法是什么。

 CFReadStreamRef readStream;
 CFWriteStreamRef writeStream;
 CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)ipAddress, port, &readStream, &writeStream);
 CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
 CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
 CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, (CFStringRef)@"proxy-ip");
 CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInteger:proxy-port]);
 CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion5);
 CFDictionarySetValue(socksConfig, NSStreamSOCKSProxyUserKey, (CFStringRef)@"proxy-username");
 CFDictionarySetValue(socksConfig, NSStreamSOCKSProxyPasswordKey, (CFStringRef)@"proxy-password");
 CFReadStreamSetProperty(readStream, kCFStreamPropertySOCKSProxy, socksConfig);
 CFWriteStreamSetProperty(writeStream, kCFStreamPropertySOCKSProxy, socksConfig);
 CFRelease(proxyDict);

更新:看起来只有一种方法可以做到这一点,通过代理进行HTTP CONNECT连接到服务器,并将该连接用于常规SSL通信。但我仍然在寻找iPhone的实现。

感谢

我终于找到了答案。在套接字上发送以下数据,并使用同一套接字创建TCP连接。
 [[NSString stringWithFormat:@"CONNECT %@:%d HTTP/1.1nProxy-Connection: Keep-Alivenn", @"10.10.10.10", 80] dataUsingEncoding:NSUTF8StringEncoding] ;

相关内容

  • 没有找到相关文章

最新更新