Commit c2cc16a9 c2cc16a93a58fa43a17ae5e3ce1118fc89c05d93 by Christian Gerdes

SSL Session Cache Disabled plugin

First tested and fully working version.
1 parent 1eac38b7
...@@ -24,38 +24,54 @@ namespace LIL_VSTT_Plugins ...@@ -24,38 +24,54 @@ namespace LIL_VSTT_Plugins
24 /// <summary> 24 /// <summary>
25 /// LoadTest Context Copy 25 /// LoadTest Context Copy
26 /// </summary> 26 /// </summary>
27 [DisplayName("Clear SSL Sessions")] 27 [DisplayName("SSL Session Cache Disabled")]
28 [Description("(C) Copyright 2018 LIGHTS IN LINE AB\r\nClears all SSL Sessions after each test from the SSLClients. Beta.")] 28 [Description("(C) Copyright 2018 LIGHTS IN LINE AB\r\nDisables SSL Session Cache and Reuse of handshakes during this loadtest. Beta.")]
29 public class ClearSSLSessions : ILoadTestPlugin 29 public class ClearSSLSessions : ILoadTestPlugin
30 { 30 {
31 LoadTest mLoadTest;
32 public void Initialize(LoadTest loadTest) 31 public void Initialize(LoadTest loadTest)
33 { 32 {
34 mLoadTest = loadTest; 33 loadTest.LoadTestStarting += new EventHandler(mLoadTest_Starting);
35 mLoadTest.TestStarting += new EventHandler<TestStartingEventArgs>(mLoadTest_TestStarting); 34 loadTest.LoadTestFinished += new EventHandler(mLoadTest_Finished);
36 mLoadTest.TestFinished += new EventHandler<TestFinishedEventArgs>(mLoadTest_TestFinished); 35 loadTest.LoadTestAborted += new EventHandler<LoadTestAbortedEventArgs>(mLoadTest_Aborted);
37 mLoadTest.TestSelected += new EventHandler<TestSelectedEventArgs>(mLoadTest_TestSelected);
38 } 36 }
39 void mLoadTest_TestStarting(object sender, TestStartingEventArgs e) 37
38 void mLoadTest_Starting(object sender, EventArgs e)
40 { 39 {
41 clearIt(); 40 zeroIt();
42 } 41 }
43 void mLoadTest_TestFinished(object sender, TestFinishedEventArgs e) 42
43 void mLoadTest_Finished(object sender, EventArgs e)
44 {
45 undoIt();
46 }
47
48 void mLoadTest_Aborted(object sender, LoadTestAbortedEventArgs e)
44 { 49 {
45 clearIt(); 50 undoIt();
46 } 51 }
47 void mLoadTest_TestSelected(object sender, TestSelectedEventArgs e) 52
53 void zeroIt()
48 { 54 {
49 clearIt(); 55 System.Reflection.Assembly asm = System.Reflection.Assembly.GetAssembly(typeof(System.Net.Security.SslStream));
56 Type t = asm.GetType("System.Net.Security.SslSessionsCache");
57 System.Reflection.FieldInfo f = t.GetField("s_CachedCreds", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
58 f.SetValue(null, new ZeroHashtable());
50 } 59 }
51 60
52 void clearIt() 61 void undoIt()
53 { 62 {
54 System.Reflection.Assembly asm = System.Reflection.Assembly.GetAssembly(typeof(System.Net.Security.SslStream)); 63 System.Reflection.Assembly asm = System.Reflection.Assembly.GetAssembly(typeof(System.Net.Security.SslStream));
55 Type t = asm.GetType("System.Net.Security.SslSessionsCache"); 64 Type t = asm.GetType("System.Net.Security.SslSessionsCache");
56 System.Reflection.FieldInfo f = t.GetField("s_CachedCreds", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); 65 System.Reflection.FieldInfo f = t.GetField("s_CachedCreds", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
57 System.Collections.Hashtable h = (System.Collections.Hashtable)f.GetValue(null); 66 f.SetValue(null, new System.Collections.Hashtable(32));
58 h.Clear(); 67 }
68 }
69
70 public class ZeroHashtable : System.Collections.Hashtable
71 {
72 public override int Count
73 {
74 get { if(base.Count % 32 == 0) this.Clear(); return 0; }
59 } 75 }
60 } 76 }
61 77
......