Wcf
消耗了asp.net mvc
服务(核心服务)。此核心服务与其他第三方服务集成以实现一些用例。所有这些第三方服务端点都通过https
公开,但在支持的SSL / TLS版本(1.0,1.1,1.2)方面有所不同。
我们对此没有多少控制权,只需在连接任何给定的第三方服务之前粘贴特定(支持)的SSL / TLS版本。即每当核心服务想要使用任何第三方服务时,它会将ServicePointManager.SecurityProtocol
设置为支持的SSL / TLS版本(第三方要求我们使用x.x或更高版本进行连接)。
// brief expression of logic which switch TLS version 1.2
var currentSecurityProtocol = ServicePointManager.SecurityProtocol; // get the current security protocol.
try
{
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//now get/post data to/from third party service
}
catch (Exception ex)
{
//report it
}
finally
{
ServicePointManager.SecurityProtocol = currentSecurityProtocol;
ServicePointManager.ServerCertificateValidationCallback = null;
}
问题:
我设法编写逻辑,通过ServicePointManager.SecurityProtocol
属性上的锁来同步访问。但是这种尝试会影响其他连接客户端的性能(当他们使用任何其他第三方产品/服务时)
答案 0 :(得分:1)
您可以指定多个版本的Tls,这样您就不需要在运行时更改它。以下代码表示它支持TLS1.0
,TLS1.1
和TLS1.2
。
如果客户支持TLS1.2
或更低版本,TLS1.2
用于创建连接
如果客户端支持TLS1.1
或更低版本,则使用TLS1.1
的最高可用安全协议。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;