как заново связывать SSL-соединение каждый раз = разные ssl-SessionID (windows, c #) - PullRequest
3 голосов
/ 14 сентября 2011

Как я могу сделать в C # / Windows7, чтобы мое приложение не использовало существующее соединение SSL. На самом деле, когда я делаю запрос get с HttpWebRequest на страницу https, если существует существующее соединение, тогда оно использует это соединение (= тот же ssl-sessionid). Я сделал несколько тестов, и Windows 7 пересмотреть соединение ssl через 2 минуты. Но я сделаю так, чтобы оно никогда не использовало существующее соединение.

Я много чего перепробовал: keep-alive, ClientCacheTime (regedit), ServicePointManager.SetTcpKeepAlive ...

Большое спасибо!

            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
            ServicePointManager.DnsRefreshTimeout = 200;
           /* ServicePointManager.SetTcpKeepAlive(false,0,0);
            ServicePointManager.DefaultConnectionLimit = 100;
            ServicePointManager.MaxServicePointIdleTime = 1;*/
        //    ServicePointManager.DefaultConnectionLimit = 1;
            uri = "https://server.com/test.jsp";

            HttpWebRequest request = (HttpWebRequest)
          WebRequest.Create(uri);
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)";
            request.CookieContainer = cookieJar;
            request.ContentType = "text/xml";// content type

            request.KeepAlive = false;
            request.ProtocolVersion = HttpVersion.Version11;
            request.Method = "GET";
            request.ConnectionGroupName = "dsd" + i;
           // request.ReadWriteTimeout = 2000;
           /* request.Timeout = 5000;
            request.UseDefaultCredentials = false;
            request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
            request.ConnectionGroupName = DateTime.Now.Ticks.ToString(); */
           // X509Certificate2 cert = new X509Certificate2("C:\\a.crt", "abcd");
           X509Certificate2 cert = new X509Certificate2();
            request.ClientCertificates.Add(cert);
           /* request.PreAuthenticate = false;
            request.Pipelined = true;*/


            WebResponse rsp = request.GetResponse();
            string PageContent = new StreamReader(rsp.GetResponseStream()).ReadToEnd();


            textBox1.Text = PageContent;
            request.ServicePoint.CloseConnectionGroup("dsd" + i);
            request.Abort();

            request.ClientCertificates.Clear();
            rsp.GetResponseStream().Close();
            rsp.Close();
            request.Abort();

1 Ответ

3 голосов
/ 14 сентября 2011

Поскольку вы не предоставляете много подробностей, просто некоторые общие указатели:

Вышеуказанное может работать ненадежно - в зависимости от версии ОС и версии Framework ...

Мне любопытно: добиться этогозначит у вас намного меньше производительности ... какова цель?

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