0

私は、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の実装を探しています。

ありがとう

4

1 に答える 1

0

私はついに答えを見つけました。次のデータをソケットで送信し、同じソケットを使用して TCP 接続を作成します。

 [[NSString stringWithFormat:@"CONNECT %@:%d HTTP/1.1\nProxy-Connection: Keep-Alive\n\n", @"10.10.10.10", 80] dataUsingEncoding:NSUTF8StringEncoding] ;
于 2015-02-17T22:39:29.913 に答える