gpt4 book ai didi

c# - SslStream,禁用 session 缓存

转载 作者:可可西里 更新时间:2023-11-01 08:45:29 27 4
gpt4 key购买 nike

MSDN documentation

The Framework caches SSL sessions as they are created and attempts to reuse a cached session for a new request, if possible. When attempting to reuse an SSL session, the Framework uses the first element of ClientCertificates (if there is one), or tries to reuse an anonymous sessions if ClientCertificates is empty.

如何禁用此缓存?

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

我用嗅探器检查了数据包,不同之处在于仅在客户端问候消息的一个地方:

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

screenshot

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

screenshot

区别似乎只是 session 标识符。

附言我想避免使用第 3 方 SSL 客户端。有没有合理的解决方案?

这是 this question 的翻译来自 ru.stackoverflow

最佳答案

缓存在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com