传输层安全性 (TLS) 1.2
使用最新版本的传输层安全性 (TLS) 对于确保应用程序网络通信安全非常重要。
警告
2018 年 4 月 – 由于安全要求的提高(包括 PCI 合规性),主要云服务提供商和 Web 服务器预计将停止支持低于 1.2 的 TLS 版本。 在早期版本的 Visual Studio 中创建的 Xamarin 项目默认使用旧版 TLS。
为了确保应用继续与这些服务器和服务配合使用,应将 Xamarin 项目更新为使用以下设置,然后重新生成应用并将其重新部署到用户。
项目必须引用 System.Net.Http 程序集,并按如下所示进行配置。
将 Xamarin.Android 更新为 TLS 1.2
更新“HttpClient 实现”和“SSL/TLS 实现”选项,以启用 TLS 1.2 安全性。
注意
需要 Android 5.0 或更高版本。
可以在“项目属性”>“Android 选项”中找到这些设置,然后单击“高级”按钮:
将 Xamarin.iOS 更新为 TLS 1.2
更新“HttpClient 实现”选项以启用 TSL 1.2 安全性。
可以在“项目属性”>“iOS 生成”中找到此设置:
将 Xamarin.Mac 更新为 TLS 1.2
在 Visual Studio for Mac 中,若要在 Xamarin.Mac 应用中启用 TLS 1.2,请更新“项目选项”>“生成”>“Mac 生成”中的“HttpClient 实现”选项:
警告
即将发布的 Xamarin.Mac 4.8 版本仅支持 macOS 10.9 或更高版本。 早期版本的 Xamarin.Mac 支持 macOS 10.7 或更高版本,但这些较旧的 macOS 版本缺少足够的 TLS 基础结构,无法支持 TLS 1.2。 若要面向 macOS 10.7 或 macOS 10.8,请使用 Xamarin.Mac 4.6 或更早版本。
替代配置选项
本部分讨论上述 TLS 1.2 支持的配置的替代配置选项。 应用程序开发人员只有在了解使用不同级别的 TLS 支持所面临的风险时才应考虑这些替代配置选项。
HttpClient 实现
Xamarin 开发人员始终能够在其代码中使用本机网络类,但是还有一个选项可以确定 HttpClient
类使用哪个网络堆栈。 这提供了熟悉的 .NET API,具有本机平台的速度和安全性优势。
选项包括:
- 托管堆栈 – Mono 提供的网络功能,或
- 本机堆栈 – 基础平台(Android、iOS 或 macOS)提供的各种网络 API。
托管堆栈提供与现有 .NET 代码的最高级别的兼容性,但速度可能较慢并会导致可执行文件较大。
本机选项运行速度会更快且具有更好的安全性(包括 TLS 1.2),但可能无法提供 HttpClient
类的所有功能和选项。
SSL/TLS 实现 (Android)
Android 项目选项还允许选择要支持的 SSL/TLS 实现:
- Mono/托管 – Android 上的 TLS 1.1
- 本机 – Android 上的 TLS 1.2。
新的 Xamarin 项目默认使用支持 TLS 1.2 的本机实现(建议所有项目使用),但如果出于兼容性原因的需要,可以切换回托管代码。
特定于平台的详细信息
上述摘要介绍了 Xamarin 项目中 HttpClient 和 SSL/TLS 实现的项目级设置。 也可以在代码中动态设置 HttpClient 实现。 有关详细信息,请参阅以下特定于平台的指南:
总结
应用程序应尽可能使用传输层安全性 (TLS) 1.2。 应根据本文中的说明更新现有应用程序中的设置,然后重新生成并重新部署到客户。
相关链接
- 应用传输安全性
- Xamarin.Android 环境
- Xamarin Cycle 9(2017 年 2 月)
- TLS (Wikipedia)
- Mono 4.8 发行说明 - TLS 1.2 支持
- BoringSSL
- HttpClient、HttpClientHandler 和 WebRequestHandler 说明
- System.Net.HttpClient
- System.Net.HttpClientHandler
- System.Net.HttpMessageHandler
- System.Net.HttpWebRequest
- System.Net.WebClient
- System.Net.WebRequest
- java.net.URLConnection
- Foundation.CFNetwork
- Foundation.NSUrlConnection
- System.Net.WebRequest