Я работаю над клиент-серверным решением, в котором мое приложение для iPhone подключается к серверу через TCP / IP с использованием SSL-соединения. Я хочу убедиться, что весь трафик SSL проходит через прокси-сервер HTTP.
Мы можем указать информацию о HTTP-прокси на iPhone в «Настройки» -> «Сведения о Wi-Fi» -> «HTTP-прокси» (Вручную / Авто). Когда мы это делаем, весь HTTP-трафик проходит через вышеупомянутый прокси-сервер. (например, весь трафик сафари, даже HTTP-трафик от всех приложений.)
Но моя проблема в том, что SSL через TCP / IP не проходит через прокси-сервер. В iPhone SDK есть набор свойств kCFStreamPropertySOCKSProxy для настройки NSStream для использования SOCKS, как указано ниже, но я не вижу возможности для настройки прокси-сервера HTTP на CFSocket / NSStream. Как лучше всего с этим справиться.
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.
Спасибо