通过HTTPS的WCF服务(自托管) - 获取协商的SSL/TLS协议版本

Jir*_*res 7 .net c# ssl wcf

出于安全原因,我们希望在操作系统级别(在followign SChannel注册表中)禁用我们服务器中的TLS 1.0支持:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
Run Code Online (Sandbox Code Playgroud)

但由于SQL Server服务无法在禁用TLS 1.0的情况下启动,因此我们不得不在操作系统级别启用TLS 1.0.

我们现在要做的是强制在应用程序级别而不是在操作系统级别上使用TLS 1.2.

我们的应用程序是Client-Server,在.NET 4.5上运行.在客户端上,在调用WCF服务之前,我们设置:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)

这可确保客户端将使用TLS1.2协议发送ClientHello消息.

但是在服务器上,这是自托管的WCF服务,我们看不到如何强制使用TLS1.2.服务器端的SSL/TSL协商基于SChannel注册表,因此设置ServicePointManager.SecurityProtocol不会产生任何影响.

我们想在我们的服务器代码中检查传入的WCF调用,并检查用于该调用的TLS协议,如果它小于TLS1.2,则关闭连接.

有没有办法如何获得传入的WCF调用SSL/TLS协议版本?像HttpContext.WebSocketNegotiatedProtocol

小智 0

您是否尝试过将自定义绑定与sslStreamSecurity一起使用?

<sslStreamSecurity requireClientCertificate="false" sslProtocols="Tls12" />
Run Code Online (Sandbox Code Playgroud)