【发布时间】:2017-01-06 06:34:04
【问题描述】:
我们正在使用 Xamarin 开发一个移动应用程序,该应用程序最初将在 Android 和 iOS 上运行,并计划在未来移植到 Windows 手机(如果使用它的 3 个人尖叫声足够大的话)。
正在传输的数据的性质以及此应用程序将允许的操作(SSO 到另一个读/写系统)我们希望采取一切措施尽可能保护数据传输层。
这自然使我们走上了 SSL/TLS 证书固定的道路(除了 API 调用本身的其他缓解措施),以保护客户端免于连接到 MITM 代理等。
我们操作 API 端点并完全控制证书,因此我们很乐意将公钥存储在应用程序中以进行固定,因为我们将能够在足够的时间内更新我们的证书并使用新的 pin 进行部署。所有证书都是有效的第 3 方签名证书(非自签名)。
不幸的是,使用 Xamarin 进行 SSL Pinning 似乎并不经常执行,因为我们发现很难找到已实现的示例。
OWASP 提供一些.NET sample SSL Pinning code,它使用 ServicePointManager.ServerCertificateValidationCallback 提供回调来检查 SSL pin;但没有特别提到它在 Xamarin 下工作。
对该代码的其他 Google 搜索通常会返回人们使用它来做与我们想要的完全相反的事情 - 他们使用它来减少 SSL 证书检查,而不是增加它!
I can see one answer 表明这种方法适用于 Android 和 iOS - 但我最感兴趣的是在 Xamarin(特别是 Xamarin.Forms)中使用它来固定 SSL/TLS 证书的特定体验。
【问题讨论】:
-
我的 2cent:进入 x-plat 公钥固定是一个漫长的答案(尤其是在全球基于云的负载平衡端点中)。我们采用的方法的简短版本是:在 iOS 上,
TrustKit用于NSURLSession和NSURLConnection连接代表,在 Android 上,我们使用来自操作系统Keystore的TrustManager来保护HttpsURLConnection仅到我们的全球端点。我们不再做 WinPhone。我们不会在 Xamarin 上使用HTTPClient,也不会在任何平台上为以安全为中心的客户端使用 Xamarin 的 HTTPClient“本机”提供程序方法,故事要长得多
标签: security ssl xamarin xamarin.ios