C#HttpWebRequest验证/指定使用哪个密码

时间:2019-03-15 19:05:57

标签: c# .net https httpwebrequest tls1.2

我正在开发需要与网站服务器建立连接的.NET 4.0应用程序。我一直在周期性地打开和关闭以下错误(模式似乎在午餐时间开始并且在群集中发生)“底层连接已关闭。发送时发生意外错误。” 我所看到的与该错误有关的所有内容都将我引向TLS错误。 我使用SSLLabs来确定远程服务器正在使用TLS 1.1和TLS 1.2,但是没有几个可用的密码。 我怀疑应用程序正在创建的连接有时会尝试使用不受支持的密码,并且会遇到此错误。

由于生产环境的敏感性以及该错误的时间安排是半随机的,因此我无法在服务器上运行Wireshark或Fiddler测试来确定故障期间使用的密码。我已经验证了该应用程序是否使用TLS 1.2。

是否可以通过编程方式从应用程序访问 HttpWebRequest对象正在使用的密码,还是可以从应用程序中指定 使用哪种密码?

1 个答案:

答案 0 :(得分:0)

几个月前,我遇到了类似的问题,我记得在某处读过,密码套件的协商是由操作系统(对于Windows为Schannel)完成的,我找不到从内部控制密码套件的方法.NET框架。

以下文章对我有所帮助,以便更好地了解围绕此问题的.NET框架行为(版本之间有所不同)。

Transport Layer Security (TLS) best practices with the .NET Framework

SCH_USE_STRONG_CRYPTO flag (which was relevant in my case)

Transport Layer Security (TLS) registry settings (This one is relevant on the Windows side to configure the available cipher suites)

编辑:

这是Troy Starr [MSFT]撰写的文章,它帮助我理解了我的问题: https://community.qualys.com/thread/16917-net-framework#comment-35829