我正在研究客户端 - 服务器解决方案,我的iPhone应用程序使用SSL连接通过TCP / IP连接到服务器。我想确保SSL上的整个流量都通过HTTP代理服务器。
我们可以在设置中指定iPhone上的HTTP代理信息 - > WiFi详细信息 - > HTTP代理(手动/自动)。当我们这样做时,所有HTTP流量都通过上面提到的代理服务器。 (例如,所有的Safari流量,甚至来自所有应用的HTTP流量。)
但我的问题是SSL over TCP / IP不通过代理服务器。 iPhone SDK具有kCFStreamPropertySOCKSProxy属性集,用于配置NSStream以进行SOCKS使用,如下所述,但我没有看到在CFSocket / NSStream上配置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实施。
由于
答案 0 :(得分:0)
我终于找到了答案。在套接字上发送以下数据并使用相同的套接字创建TCP连接。
[[NSString stringWithFormat:@"CONNECT %@:%d HTTP/1.1\nProxy-Connection: Keep-Alive\n\n", @"10.10.10.10", 80] dataUsingEncoding:NSUTF8StringEncoding] ;