私は、iPhone アプリが SSL 接続を使用して TCP/IP 経由でサーバーに接続するクライアント サーバー ソリューションに取り組んでいます。SSL 上のトラフィック全体が HTTP プロキシ サーバーを通過するようにしたいと考えています。
iPhone の HTTP プロキシ情報は、[設定] -> [WiFi の詳細] -> [HTTP プロキシ (手動/自動)] で指定できます。これを行うと、すべての HTTP トラフィックが上記のプロキシ サーバーを通過します。(例: すべてのサファリ トラフィック、さらにはすべてのアプリからの HTTP トラフィック。)
しかし、私の問題は、SSL over TCP/IP がプロキシ サーバーを経由しないことです。iPhone SDK には、以下で説明するように、SOCKS を使用するために NSStream を構成するためのプロパティの kCFStreamPropertySOCKSProxy セットがありますが、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 トラフィックに接続を使用する方法は 1 つしかないようです。しかし、まだiPhoneの実装を探しています。
ありがとう