Windows Server 2016调用Firebase .NET SDK发消息出现SSL/TLS错误如何解决
问题原因
该问题并非Firebase Admin SDK不支持高版本TLS,而是.NET Framework 4.6.1的默认安全协议配置逻辑导致:
- .NET Framework 4.6.1原生已支持TLS 1.2,但默认情况下出站HTTP请求的安全协议继承操作系统默认配置,不会主动优先使用TLS 1.2
- Google Firebase全系列API早已停止对TLS 1.0及更低版本协议的支持,必须使用TLS 1.2及以上版本才能完成通信
- 当你禁用服务器TLS 1.0后,代码未显式指定使用高版本TLS,握手阶段客户端和服务端无法匹配到共同支持的协议/密码套件,就会抛出对应的通信错误
解决方案
你可以通过以下两种方案强制启用TLS 1.2,无需保留TLS 1.0或弱CBC密码套件:
方案1:代码层面修改
在调用Firebase相关方法前的逻辑入口处(如应用全局启动事件、sendMessage方法开头)添加如下VB.NET代码:
Imports System.Net ' 强制指定支持的TLS版本,可根据需求调整是否保留低版本协议 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
该配置会对当前应用所有后续出站HTTP请求生效,优先使用TLS 1.2和Google服务完成握手。
方案2:配置文件层面修改(无需改动业务代码)
直接修改应用对应的配置文件:
- 若为Web应用,修改
web.config - 若为桌面/控制台应用,修改
app.config
在<configuration>根节点下添加如下配置:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false;Switch.System.Net.DontEnableSystemDefaultTlsVersions=false" /> </runtime> <system.web> <httpRuntime targetFramework="4.6.1" /> </system.web>
该配置会强制.NET Framework 4.6.1启用强加密逻辑,遵循操作系统的TLS版本优先级,自动优先选择TLS 1.2发起请求。
修改完成后重启应用即可生效。
内容的提问来源于stack exchange,提问作者Gary Liu
相关产品推荐
相关产品推荐

