【发布时间】:2019-05-07 05:35:53
【问题描述】:
如何在 C#/Windows7 中做到我的应用不重用现有的 SSL 连接。实际上,当我使用HttpWebRequest 向 https 页面发出获取请求时,如果存在现有连接,那么它会使用此连接(= 相同的 ssl-sessionid)。我做了一些测试,Windows 7 在 2 分钟后重新协商了 ssl 连接。但我希望它永远不会重用现有的连接。
我尝试了很多东西:
保持活动状态,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();
【问题讨论】:
-
SslEmptyCache msdn.microsoft.com/en-us/library/aa380388.aspx