我正在开发客户端-服务器解决方案,其中我的 iPhone 应用程序使用 SSL 连接通过 TCP/IP 连接到服务器。我想确保 SSL 上的所有流量都通过 HTTP 代理服务器。
我们可以在设置 -> WiFi 详细信息 -> HTTP 代理(手动/自动)中指定 iPhone 上的 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 的实现。
谢谢