opera-proxy icon indicating copy to clipboard operation
opera-proxy copied to clipboard

Snawoot нужна помощь!

Open ExerKey opened this issue 3 years ago • 1 comments

Привет!!! Как вы используете свой локальный прокси? Помогите пожалуйста, хоть чем-нить. Например: Я делаю прокси сервер, принимаю соединение от клиента "CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\nProxy-Connection: Keep-Alive\r\n\r\n", редактирую добавляю Proxy-Authorization: Basic, дальше соединяюсь к https прокси через openssl, посылаю клиенту "HTTP/1.1 200 OK\r\n\r\n", и дальше обрабатываю сокеты как обычное tcp?

  1. Вот так:

             if (FD_ISSET(socket_client, &readfds))
             {
                 int recvd = recv(socket_client, buf, sizeof(buf), 0);
                 if (recvd <= 0)           
                 send(proxy_socket, buf, recvd, 0);                
             }
    
             if (FD_ISSET(proxy_socket, &readfds))
             {
               int recvd = recv(proxy_socket, buf, sizeof(buf), 0);
                 if (recvd <= 0)
                     break;
                  send(socket_client, buf, recvd, 0);     
             }
    

Или принимаю соединение SSL_accept, расшифровываю данные от клиента, и создаю новое ssl соединение, и отправляю данные к прокси и потом к клиенту? 2. Вот так:

            if (FD_ISSET(socket_client, &readfds))
            {
               int recvd = SSL_read(ssl_client, buf, sizeof(buf));
                if (recvd <= 0)
                    break;                   
               SSL_write(ssl_conn, buf, recvd);               
            }

            if (FD_ISSET(proxy_socket, &readfds))
            {
               int recvd = SSL_read(ssl_conn, buf, sizeof(buf));
                if (recvd <= 0)
                    break;
                SSL_write(ssl_client, buf, recvd);             
            }

В первом случае не получается, во втором получается, но у клиента сертификат в инфо, показывает моего сервера. А Когда я использую ваш прокси то показывает сертификат куда я подключаюсь например example.com, Второй вариант это mitm получается? Или как я должен делать? может в ответ клиенту я должен отправить сертификат который мне прислал прокси? Или как? Не подскажите как вы это сделали? Хотя бы на словах объясните пожалуйста. Я просто в Go плохо разбираюсь. Буду рад любой помощи.

ExerKey avatar Jun 29 '22 11:06 ExerKey

Здравствуйте! Правильно по первому варианту делать. Если не получается - разбираться, что именно.

Snawoot avatar Jun 30 '22 14:06 Snawoot

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Aug 30 '22 17:08 stale[bot]