c# WCF Web 服务以及如何检测客户端 TLS 版本

c# WCF Web service and how to detect client TLS version

我有一个 .Net 4.6 WCF 网络服务(网络项目中的 .svc 文件),我想获得连接客户端的 TLS 版本,以便我可以在服务器端记录它。

有了这些信息,我可以创建一份报告,在我们关闭早期版本的 TLS 之前通知受影响的客户。

谢谢

我们可以通过以下语句查看当前在 WCF 中使用的 TLS 版本。

Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());

可能的值如下Enum
https://docs.microsoft.com/en-us/dotnet/api/system.net.securityprotocoltype?view=netframework-4.8
事实上,大部分值是 SystemDefault。除非客户指定要使用的版本。这是因为TLS通信需要DotNet framework SDK和OS版本的支持。服务端和客户端协商后会优先使用最新(更安全)的版本。无法获取实用版本,取决于服务端和客户端的环境。
详情请见下方link。
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls?view=netframework-4.8
当我们想在服务器端禁用 TLS 版本时,下面的 link 可能对您有用。
WCF Service TLS 1.2 Enforcement
如果有什么我可以帮忙的,请随时告诉我。

最后我用

装饰了我的 WCF 服务
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

然后使用;

收集信息
  var CRYPT_PROTOCOL = Convert.ToString(HttpContext.Current.Request.ServerVariables["CRYPT_PROTOCOL"]);
  var CRYPT_CIPHER_ALG_ID = Convert.ToString(HttpContext.Current.Request.ServerVariables["CRYPT_CIPHER_ALG_ID"]);
  var CRYPT_HASH_ALG_ID = Convert.ToString(HttpContext.Current.Request.ServerVariables["CRYPT_HASH_ALG_ID"]);
  var CRYPT_KEYEXCHANGE_ALG_ID = Convert.ToString(HttpContext.Current.Request.ServerVariables["CRYPT_KEYEXCHANGE_ALG_ID"]);

CRYPT_PROTOCOL 对于 TLS1.2 可以是 400,对于 TLS 1.0 可以是 40,对于 SSLv3 可以是 10

我没有测试亚伯拉罕的回复(但是谢谢)