我正在使用一个.NET 4.0应用程序,该应用程序需要连接到网站服务器。我经常收到以下错误消息(模式似乎开始于午餐前后,并成群发生)“底层连接关闭。发送时发生意外错误。”我所看到的与此错误相关的一切都指向TLS错误。我使用SSLLabs来确定远程服务器使用的是TLS 1.1和TLS 1.2,但没有几个可用的密码。我怀疑应用程序正在创建的连接偶尔会尝试使用不受支持的密码,因此会出现此错误。
由于生产环境的敏感性和此错误发生时间的半随机性,我无法在服务器上运行wireshark或Fiddler测试来确定在故障期间使用了什么密码,但是我已经验证了应用程序使用的是TLS 1.2。
有没有办法 * 从应用程序 * 以编程方式访问HttpWebRequest对象正在使用的密码,或者有没有办法 * 从应用程序 * 指定要使用的密码?
2条答案
按热度按时间6pp0gazn1#
几个月前我也遇到过类似的问题,我记得在什么地方读到过密码套件的协商是由操作系统完成的(在Windows中是Schannel),我找不到从. NET框架内控制这个问题的方法。
为了更好地理解. NET框架在这方面的行为(不同版本之间的行为是不同的),下面的文章对我很有帮助。
Transport Layer Security (TLS) best practices with the .NET Framework
SCH_USE_STRONG_CRYPTO标志(与我的案例相关)
Transport Layer Security (TLS) registry settings (This one is relevant on the Windows side to configure the available cipher suites)
这篇文章(作者Troy Starr [MSFT])帮助我理解了我的问题:www.example.comhttps://community.qualys.com/thread/16917-net-framework#comment-35829
j8yoct9x2#
您可以在此处找到Schannel(执行SSL握手的SSL工具/设备)的调试信息:
默认情况下,Microsoft SSL只将严重的SSL连接错误记录到事件日志中。但是,您可以通过更改Windows注册表来更改此处记录的SSL连接信息的级别。首先,确保以下REG_DWORD注册表项存在。(如果不存在,请添加它。)
HKEY_LOCAL_MACHINE\系统\当前控件集\控件\安全提供程序\SCHANNEL\事件日志记录
接下来,将这个新条目的值设置为“7”。从这一点开始,您应该会看到Schannel事件显示在该服务器上的系统事件日志中。
有关详细信息,请参阅以下Microsoft知识库文章:
http://support.microsoft.com/kb/260729