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
我没有测试亚伯拉罕的回复(但是谢谢)
我有一个 .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
我没有测试亚伯拉罕的回复(但是谢谢)