2015-02-06 5 views
0

내 iPhone 앱이 SSL 연결을 사용하여 TCP/IP를 통해 서버에 연결하는 클라이언트 - 서버 솔루션에서 작업하고 있습니다. SSL에서 전체 트래픽이 HTTP 프록시 서버를 통과하는지 확인하려고합니다.iPhone 응용 프로그램의 CONNECT 메서드를 사용하여 SSL을 통한 HTTP 프록시 구현

설정 -> WiFi 세부 정보 -> HTTP 프록시 (수동/자동)에서 iPhone에 HTTP 프록시 정보를 지정할 수 있습니다. 이렇게하면 모든 HTTP 트래픽이 위에서 언급 한 프록시 서버를 통과합니다. (예 : 모든 사파리 트래픽, 심지어 모든 앱의 HTTP 트래픽)

하지만 내 문제는 SSL over TCP/IP가 프록시 서버를 통과하지 못한다는 것입니다. iPhone SDK에는 kCFStreamPropertySOCKSProxy 속성 집합이있어 SOCKS 사용을 위해 NSStream을 아래에서 설명한대로 구성하지만 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); 

UPDATE : 그것을 할 수있는 단 하나의 방법이처럼 보이는하는 HTTP 서버에 프록시를 통해 연결 및 일반 SSL 트래픽에 대한 연결을 사용합니까. 하지만 여전히 iPhone 구현을 찾고 있습니다.

감사합니다.

답변

0

마지막으로 대답을 찾았습니다. 소켓에 다음 데이터를 보내고 동일한 소켓을 사용하여 TCP 연결을 만듭니다.

[[NSString stringWithFormat:@"CONNECT %@:%d HTTP/1.1\nProxy-Connection: Keep-Alive\n\n", @"10.10.10.10", 80] dataUsingEncoding:NSUTF8StringEncoding] ; 
+0

"소켓에서 데이터 보내기"란 무엇입니까? 어떻게 연결을 설정 했습니까? 코드를 공유 할 수 있습니까? – madlymad