MSDN documentation 说
如何禁用此缓存?
目前,我在重新连接到服务器时遇到问题(即,第一个连接工作正常,但尝试重新连接服务器时会中断 session )。重新启动应用程序会有所帮助(但当然仅适用于第一次连接尝试)。我认为问题根源是缓存。
我用嗅探器检查了数据包,区别仅在客户端 Hello 消息中的一个地方:
第一次连接到服务器(成功):
第二次连接尝试(没有程序重启,失败):
区别似乎只是 session 标识符。
附言我想避免使用第 3 方 SSL 客户端。有没有合理的解决办法?
这是来自 ru.stackoverflow 的 this question 的翻译
最佳答案
缓存在 SecureChannel 内部处理 - 包装 SSPI 并由 SslStream 使用的内部类。我在里面看不到任何可以用来禁用客户端连接的 session 缓存的点。
您可以使用反射清除连接之间的缓存:
var sslAssembly = Assembly.GetAssembly(typeof(SslStream));
var sslSessionCacheClass = sslAssembly.GetType("System.Net.Security.SslSessionsCache");
var cachedCredsInfo = sslSessionCacheClass.GetField("s_CachedCreds", BindingFlags.NonPublic | BindingFlags.Static);
var cachedCreds = (Hashtable)cachedCredsInfo.GetValue(null);
cachedCreds.Clear();
但这是非常糟糕的做法。考虑修复服务器端。
关于c# - SslStream,禁用 session 缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30079379/