SSL (HTTPS) ошибка на мой пользовательский прокси-сервер - PullRequest
0 голосов
/ 18 июня 2011

вот код режима i!когда я отправляю http запрос от firefox, он работает нормально!но когда я пытаюсь ответить https firefox следующим образом:

Произошла ошибка при подключении к mail.yahoo.com.SSL получил запись с неизвестным типом контента.(Код ошибки: ssl_error_rx_unknown_record_type)

Я отлаживаю код, он успешно подключается к https и получает байты, но когда он передает его в сокет, он отклоняет:

Слушатель на 8080и мой код:

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
            CookieContainer cookie = new CookieContainer();
            if (strClientConnection.Contains("443")) {
                strClientConnection = "https://" + strClientConnection.Replace(":443",""); 
            };
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strClientConnection);
            request.CookieContainer = cookie;
            request.KeepAlive = true;
            request.Timeout = 120000;
            request.AllowAutoRedirect = true;
            request.ReadWriteTimeout = 120000;
            request.Method = "POST";
            {
                using (HttpWebResponse myWebResponse = (HttpWebResponse)request.GetResponse())
                {
                    bool isSuccess = (int)myWebResponse.StatusCode < 299 && (int)myWebResponse.StatusCode >= 200;
                    if (isSuccess)
                    {
                        using (Stream reader = myWebResponse.GetResponseStream())
                        {
                            int BytesRead = 0;
                            Byte[] Buffer = new Byte[32];
                            int BytesSent = 0;
                            BytesRead = reader.Read(Buffer, 0, 32);

                            while (BytesRead != 0)
                            {
                                m_sockClient.Send(Buffer, BytesRead, 0);
                                BytesSent += BytesRead;
                                BytesRead = reader.Read(Buffer, 0, 32);
                            }
                        }
                    }
                }
            }

1 Ответ

4 голосов
/ 18 июня 2011

HTTP-прокси, как правило, не выполняет HTTPS-запрос сам по себе (если он специально не предназначен для «официальной» атаки «человек посередине»).

HTTP-клиенты (включая браузеры) используют HTTPCONNECT метод, позволяющий прокси-серверу пересылать весь туннель HTTPS-запроса (фактически, SSL / TLS) на целевой HTTPS-сервер.

Когда вы получаете CONNECT запрос на прокси (скажем, CONNECT host.example.org:443), вы должны установить прямое TCP-соединение с host.example.org:443 и передать его содержимое (в обе стороны) в браузер без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...