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

时间:2020-02-24 14:12:59

标签: wcf tls1.2

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

借助此信息,我可以创建一个报告,以在关闭早期版本的TLS之前通知受影响的客户。

谢谢

2 个答案:

答案 0 :(得分:0)

下面的语句可以看到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版本的支持。协商后,服务器和客户端将优先使用最新(安全)版本。无法获得实用版本,因为它取决于服务器端和客户端的环境。
有关详细信息,请参见下面的链接。
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls?view=netframework-4.8
当我们要在服务器端禁用TLS版本时,以下链接可能对您有用。
WCF Service TLS 1.2 Enforcement
随时让我知道是否有什么可以帮助您的。

答案 1 :(得分:0)

最后,我用

装饰了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"]);

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

我还没有检验亚伯拉罕的回答(谢谢)

相关问题