MSDN documentation



如何禁用此缓存?

目前,我在重新连接到服务器时遇到问题(即,第一个连接工作正常,但尝试重新连接服务器时会中断 session )。重新启动应用程序会有所帮助(但当然仅适用于第一次连接尝试)。我认为问题根源是缓存。

我用嗅探器检查了数据包,区别仅在客户端 Hello 消息中的一个地方:

第一次连接到服务器(成功):

c# - SslStream,禁用 session 缓存-LMLPHP

第二次连接尝试(没有程序重启,失败):

c# - SslStream,禁用 session 缓存-LMLPHP

区别似乎只是 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/

10-13 08:51
查看更多