2009-09-05 2 views
0

HTTP 요청을 가로 채기 위해 QTcpSocket을 사용하여 프록시로 작동하는 응용 프로그램이 있습니다. HTTPS에서도 작동하도록 확장하려고 시도하고 있지만 예상대로 작동하지 않는 것으로 보입니다. 응용 프로그램의 고유성으로 인해 QHttp를 사용할 수 없습니다.Qt4 QSslSocket 트리거 HTTP 406 응답 q

현재, 나는 다음과 같은있다 : 나는 QSslSocket를 사용하여 매우 유사 뭔가를 시도했습니다

serverConnection = new QTcpSocket(); 
    serverConnection->setProxy(proxy); 
    serverConnection->connectToHost(url_hostname, url_port); 
    serverConnection->write(request.toAscii()); 
    connect(serverConnection, SIGNAL(readyRead()), this, SLOT(readServerData()), Qt::DirectConnection); 

을하지만, 불행히도 결과는 내가 기대했던 것이 아니다. 요청을 수행 할 QSslSocket를 사용

serverSConnection = new QSslSocket(); 
    serverSConnection->connectToHostEncrypted(url_hostname, url_port); 
    if (!serverSConnection->waitForEncrypted()) { 
     qDebug() << "waitForEncrypted failed"; 
    } 
    serverSConnection->write(request.toAscii()); 
    connect(serverSConnection, SIGNAL(readyRead()), this, SLOT(readSServerData()), Qt::DirectConnection); 

트리거 나타납니다 HTTP/1.1 406 불가

내가 통해 보내고있다 요청이 다음의 라인을 따라 뭔가 같습니다

Received Request: "CONNECT www.somesslhost.com:443 HTTP/1.1 
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 
Proxy-Connection: keep-alive 
Host: www.somesslhost.com 

누락 된 QSslSocket을 사용하여 응용 프로그램을 통해 HTTPS 요청을 보내는 것에 특별한 것이 있습니까?

+0

응용 프로그램이 대상 서버에서 보내는 요청 또는 브라우저가 응용 프로그램에 보내는 요청 중 마지막 조각입니까? –

+0

마지막 스 니펫은 대상 서버에 보내는 요청입니다. – Michael

답변

1

현재 정보를 통해 나는 당신이 잘못하고 있다는 생각 만 할 수 있습니다.

클라이언트가 일반 HTTP 요청을 응용 프로그램에 보내고 HTTPS 서버로 전달하려는 경우이 방법을 사용하는 것이 좋습니다.

클라이언트가 대신 HTTPS를 사용할 수 있고 응용 프로그램을 표준 프록시 서버로 사용하는 경우 이와 같은 서버에 연결하지 않아도됩니다. 대상 서버가 자신과 자신 사이의 프록시 역할을하도록 설득하려고하기 때문에 406이 표시됩니다.

Tunneling SSL Through a WWW Proxy을 살펴볼 수 있습니다. 기본적으로 들어오는 요청을 구문 분석하고 서버에 '원시'연결을 설정하고 클라이언트에 설정 확인을 응답 한 다음 패킷을 앞뒤로 전달해야합니다.

전체 SSL 협상이 클라이언트와 대상 서버 사이에서 수행되므로 프록시 서버는 암호화 된 패킷을 해독 할 수 없도록 전달하기로되어 있습니다.

+0

QSslSocket을 사용하여 피어 인증서를 수동으로 검색해야합니까, 아니면 자동으로 처리됩니까? – Michael

0

내가 혼란 스러워요 - 당신은 말 :

내가 절편 HTTP 요청에 QTcpSocket를 사용하여 프록시로 작동하는 응용 프로그램이 있습니다.

"가로 채기"란 무엇을 의미합니까? HTTP 프록시 애플리케이션을 작성하려고합니까? 보다 명확한 &을 지정하십시오. 아마도 도움이 될 것입니다.

+0

죄송합니다. 정말 저조했습니다. 프록시를 모두 무시하십시오. 난 단지 실제로 작동하는 표준 SSL 소켓 연결을 만들려고합니다. SSL을 통해 통신하도록 응용 프로그램을 설정할 때 SSL 핸드 셰이크가 제대로 작동하지 않는 것 같습니다. – Michael