Yount_0701 Ответов: 0

OPENSSL имеет дело с методом HTTP CONNECT.


HTTP имеет методы CONNECT / GET / POST .... Если моя клиентская программа пройдет через прокси-сервер и получит доступ к интернету. похоже : my_client --&ГТ; прокси --&ГТ; web-сервер.

OPENSSL-это мощная библиотека для работы с HTTPS(SSL/TLS).Я пытаюсь использовать эту библиотеку для доступа к веб-серверу через прокси-сервер средней стороны. Без средней стороны клиентская программа работает хорошо.

Я просто не знаю, как обращаться с прокси-сервером средней стороны.
В соответствии с пакетами wireshark выполните следующие действия:
1.It следует построить соединение с прокси-сервером средней стороны с помощью метода HTTP CONNECT.пакет протокола содержит информацию о веб-сервере.
2.Запустите SSL/TLS рукопожатие .(клиентский привет / серверный привет / шифр обмена ...)
3.HTTP-запрос и ответ с шифрованием.

Шаг “1.” прост , просто какой-то обычный сокет соединяется с прокси , текст tcp с методом подключения содержит некоторую информацию о веб-сервере и отвечает на "200 OK connect established ";
Шаг " 2 " не удался. Я объединяю сокет шага "1." с контекстом ssl и вызываю
SSL_connect
справиться с рукопожатием не удалось.

Что я уже пробовал:

некоторые фрагменты кода, чтобы объяснить, с чем я пытаюсь иметь дело.
// windows env.
WSAStartup(MAKEWORD(2,2),&wsaData);

//construct socket 
handle = socket(AF_INET, SOCK_STREAM, 0);

// tcp connect with middle side proxy.
connect(handle, (struct sockaddr *) &server,sizeof (struct sockaddr)); //server means the middle side proxy

// send CONNECT with middle side proxy.
/* the connect package like this:
 "CONNECT wx.qq.com:443 HTTP/1.1\n"                                                                                               
 "Host: wx.qq.com:443\n"                                                                                                          
 "Proxy-Connection: keep-alive\n"                                                                                                 
 "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36\n\n"

 */
Proxy_CONNECT_reqstr(req_str);

// now the openssl part.
SSL_load_error_strings();
 
// Register the available ciphers and digests
SSL_library_init();
OpenSSL_add_all_algorithms();

//New SSL context 
sslContext = SSL_CTX_new(SSLv23_client_method());

//SSL structure
sslHandle = SSL_new(c->sslContext);

// combine the socket with SSL 
SSL_set_fd(sslHandle , handle );

// SSL connect
SSL_connect(sslHandle); // failed.


Надеюсь, кто-нибудь даст мне пример использования OPENSSL для доступа к веб-серверу через прокси-сервер средней стороны.

0 Ответов