我正在开发的一个 Android 应用也遇到了类似的问题。
事实证明,我必须专门关闭 TLS 1.0,然后才能尝试更新版本的 TLS。我认为这是一个愚蠢的问题,但我最终所做的工作奏效了,所以我不会抱怨太多。
第一篇文章包含许多有关审核代码的页面链接,以查看您正在使用的方法是否专门将您锁定在 TLS 1.0 中,就好像您不小心将其硬编码进去一样。
如果您使用的是自定义绑定:
- 配置 WCF 以允许操作系统通过以下方式选择最佳安全协议
将 SslProtocols 设置为使用 SslProtocols.None。
- 或者配置使用的协议配置路径system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols。
如果您没有使用自定义绑定,而是使用配置设置 WCF 绑定,请使用配置路径 system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocols 设置使用的协议。
适用于 .NET Framework 4.6 - 4.6.2 而不是 WCF
将 DontEnableSystemDefaultTlsVersions AppContext 开关设置为 false。请参阅通过 AppContext 开关配置安全性。
对于使用 .NET Framework 4.6 - 4.6.2 的 WCF,使用带有证书凭据的 TCP 传输安全
您必须安装最新的操作系统补丁。请参阅安全更新。
除非您明确配置协议版本,否则 WCF 框架会自动选择最高 TLS 1.2 可用的最高协议。有关详细信息,请参阅前面的部分使用带有证书凭据的传输安全性的 WCF TCP 传输。
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
上面的页面链接到下面的链接,该链接专门用于从您的项目中删除 TLS 1.0 依赖项以迁移到 TLS 1.2+。
https://www.microsoft.com/en-us/download/details.aspx?id=55266
- 识别 AcquireCredentialsHandle() 的所有实例。这有助于审阅者更接近可能硬编码 TLS 的代码块。
- 查看硬编码 TLS 的 SecPkgContext_SupportedProtocols 和 SecPkgContext_ConnectionInfo 结构的任何实例。
- 在本机代码中,将 grbitEnabledProtocols 的任何非零赋值设置为零。这允许操作系统使用其默认的 TLS 版本。
- 如果启用 FIPS 模式,则禁用它,因为它可能与本文档中明确禁用 TLS 1.0/1.1 所需的设置发生冲突。有关详细信息,请参阅附录 B。
- 使用在 Server 2012 或更早版本上托管的 WinHTTP 更新和重新编译任何应用程序。
一种。应用程序必须通过 WinHttpSetOption 添加代码以支持 TLS 1.2
- 要覆盖所有基础,请扫描源代码和在线服务配置文件以查找以下与 TLS 硬编码中常用的枚举类型值相对应的模式:
一种。安全协议类型
湾。 SSLv2、SSLv23、SSLv3、TLS1、TLS 10、TLS11
C。 WINHTTP_FLAG_SECURE_PROTOCOL_
d。 SP_PROT_
e. NSStreamSocketSecurityLevel
F。 PROTOCOL_SSL 或 PROTOCOL_TLS
这是文档的主要内容,但除此之外还有更多内容。我建议您检查一下并确保您不会意外犯错,或者您有阻止您前进的遗留代码。这可能有点重写,而不仅仅是一个设置,祝你好运!