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 для доступа к веб-серверу через прокси-сервер средней стороны.