在我的这些年的开发中,我可以肯定的一点是,保护网络请求是任何移动应用程序的基本组成部分。几周前我的一个应用程序停止工作,因为我改变了在mettup.com的服务器上的安全套接字层(SSL)认证,这使我认识到传输层安全(TLS)在确保应用程序和服务器请求中起着重要的作用。

我在我的播客合并冲突中更详细地讨论TLS,但简而言之,TLS提供了对称加密技术,可以防止中间人攻击,也可以防止移动设备的任何通信隐私。Meetup更新了他们的认证服务器要求在使用制作请求时最少要TLS1.2版本,因此我很清楚的更新了我的应用程序并启用TLS1.2以支持我的Xamarin.iOS和Xamarin.Android应用,仅改变了一些构建配置。

基础知识

当涉及到网络请求和TLS时,有两个重要的设置我们可以修改:

  • HttpClient: 处理HttpMessageHandler实现以提供消息处理或者提供底层的本机实现。
  • TLS/SSL: 处理应用程序使用的TLS的实现。

我们可以选择的每个实现都提供了不同的功能、速度和兼容性,同时提供了一个标准的网络请求调用,并在幕后透明地表现。

Android

选择HttpClient 和TLS实现的设置,通过右键点击项目可以发现,通过在Windows版Visual Studio中,Properties > Android Options > Advanced或者在Xamarin Studio中Options > Build > Android Build > General

启动位置

在Android上HttpClient 实现我们通过在使用new HttpClient()默认控制,而TLS / SSL实现控件的默认WebRequest。

受控的 HttpClientHandler是 HttpClient 处理完全管理的实现, 几年来它都是Xamarin.Android的默认实现。而在功能方面最兼容的时候,折衷是一个稍大的可执行文件大小,并且执行速度可能比本机实现慢。此实现仅与过去的TLS 1/1.1兼容, 但是,在TLS / SSL实现中有一个新的选项来使用本地TLS 1.2 +,它将在所有的调用下使用谷歌下一个令人讨厌的SSL。

本地的 AndroidClientHandler 选项使用本地的java.net.URLConnection来处理所有的HTTP请求,改进的性能和更小的可执行文件的大小。 AndroidClientHandler 警告虽然它将在所有版本的Android上运行,它只会在Android 5 +设备提供支持TLS 1.2和几个HttpClient功能可能不可用。

选择编程

或者,你可以混合和匹配使用托管和一个电话呼叫的基础上人HttpClient Handler。简单地传递一个 AndroidClientHandler 实例,在创建HttpClient时:

点击(此处)折叠或打开

  1. using System.Net.Http;
  2. ...
  3. // This will use the default message handler for the application; as
  4. // set in the Project Options for the project.
  5. var client = new HttpClient();
  6. // Use AndroidClientHandler for all calls from this HttpClient
  7. var client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());

OS与TLS兼容性

确保这一点很重要,在SSL/TLS实现框中选择 Native TLS 1.2+ ,如果你的应用要求TLS 1.2+。Android的应用程序需要运行的版本将决定我们是否应该选择托管或本机HttpClient实现。对于Meetup网站经理,我选择了HttpClientHandler和本地托管TLS 1.2 +所以我可以支持TLS 1.2 +在所有我的电话,无论安卓版。

iOS & macOS

iOS 和macOS 在处理程序和TLS支持时更简化。所有来自于Xamarin.iOS 10.8的iOS应用都使用苹果的TLS使用本地执行的,它为所有应用程序提供完整的TLS 1.2 +支持。还有几个选项,开发者可以选择当谈到HttpClient实现,通过在Visual Studio中右击工程并选择 Properties > iOS Build > Advanced 或者在Xamarin Studio选择 Options > Build > iOS Build来找到。

有三种不同的HttpClient的处理程序,可以选择iOS应用。默认管理HttpClientHandler提供HttpClient功能最大的兼容性。然而,像管理Android HttpClient处理程序,它还需要更多的托管代码,可以增加应用程序的大小。另外两个选项,CFNetwork Handler(iOS 6 +)和NSURLSession Handler(iOS 7 +),包装器是否围绕各自的原生api,提供用于网络通信和传输的底层本机代码。使用这些将导致更小的可执行文件,提高网络性能,并使用底层的IOS队列和线程。缺点是,有可能不是所有的全功能的.net HttpClient的功能和选项。

选择编程

就像 Xamarin.Android我们可以选择我们的应用程序使用HttpMessageHandler务实:

点击(此处)折叠或打开

  1. using System.Net.Http;
  2. ...
  3. // This will use the default message handler for the application; as
  4. // set in the Project Options for the project.
  5. var client = new HttpClient();
  6. // This will create an HttpClient that explicitly uses the CFNetworkHandler
  7. var client = new HttpClient(new CFNetworkHandler());
  8. // This will create an HttpClient that explicitly uses NSUrlSessionHandler
  9. var client = new HttpClient(new NSUrlSessionHandler());

更新TLS 和HttpClient 实现,将使我们的应用程序能够完全安全,并兼容我们应用程序必须与之交互的任何后端。

了解更多

一定要看我们的更新,跨平台 传输层安全 文档, 对于一个完整的,所有的TLS选项Xamarin开发进行了深入的分析,其中包括额外的切换和指导。你也可以查看特定平台的文档,为 Android 和 iOS / macOS 分别颁发的。还有,一定要听我的考验和磨难,在 Merge Conflict 37: TLS – How do you EVEN上。最后,学习更多Xamarin大学的 自学课程 “Consuming REST-based Web Services”, 它研究了如何在移动应用程序中集成和使用REST式Web服务。

【Xamarin】使用TLS 1.2保护Web请求相关推荐

  1. 使用 PEAR的Text_CAPTCHA保护Web表单[翻译]

    使用 PEAR的Text_CAPTCHA保护Web表单 作者 Marcus Whitney 翻译 mikespook 来源 http://phpsec.org 当你在网络上有公开的表单的时候,你总是需 ...

  2. 使用这些 HTTP 头保护 Web 应用

    使用这些 HTTP 头保护 Web 应用 摘要: 安全是个大学问. 这是关于web安全性系列文章的第 三 篇,其它的可点击以下查看: Web 应用安全性: 浏览器是如何工作的 Web 应用安全性: H ...

  3. Day083 web请求生命周期分析

    一.web请求生命周期分析 1.概述 ​ web请求是基于http协议的,而http协议是基于请求/响应的模式,即一个请求对应一个响应,那么一个web请求(或者说http请求)的生命周期就是指从发起一 ...

  4. Web请求响应简单整理

    简单对Web请求响应如何处理进行的整理,难免有理解不到位,理解有偏差的地方,如有理解有误的地方,希望大牛批评指正. 1.Web开发的定义 首先看看微软对Web开发的定义: Web开发是一个指代网页或网 ...

  5. 关于PKI架构(使用证书)保护Web访问的安全实现SSL的基本理论

    当您正在使用电子商务.电子银行转存帐,可能您的Web页面需要经过安全加密处理,那么,此时您就必须用到https,其中的s是secure(安全保护的意思)https是在安全套接层(SSL)之上使用htt ...

  6. web请求报出 “超过了最大请求长度” 【注意:重启IIS】

    摘自:http://www.cnblogs.com/loalongblogs/archive/2012/10/16/2726372.html web请求报出 "超过了最大请求长度" ...

  7. nginx处理web请求分析

    一.基于域名的虚拟服务器 nginx首先确定使用哪一个server域来处理请求,下面的例子中有3个虚拟服务器监听*:80端口. server { listen 80; server_name ngin ...

  8. 对象的当前状态使该操作无效 说明: 执行当前 Web 请求期间,出现未处理的异常。...

    这个异常在页面数据量小的时候并不会触发,只在页面数据量大的情况下才会出现, 异常信息如下: 对象的当前状态使该操作无效.  说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以 ...

  9. 一个完整的 Web 请求到底发生了什么

    阅读本文大概需要 7 分钟. 一.从输入一个网址开始 当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面.网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 本文主要内容是试图记录 ...

  10. Spring Boot中使用AOP统一处理Web请求日志

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...

最新文章

  1. python模块学习(四)
  2. javascript处理事件的一些兼容写法
  3. Intel Realsense D435报错:RuntimeError: Acquire failed!
  4. error2---BeginPath和EndPath之间的TextOut无法显示
  5. 没有Dubbo Admin,怎么查看zookeeper中注册的dubbo服务?
  6. 利用组策略管理器映射网络驱动器的方法
  7. 跨过虚拟化技术浪潮,这家企业快步入局云数据管理​
  8. mysql索引数据结构图解_一步一步推导MySQL索引隐秘的底层数据结构
  9. 2020年陕西省高等职业院校技能大赛信息安全管理与评估赛项竞赛手册
  10. ​TCP和UDP的135、137、138、139、445端口的作用?​
  11. android FTP上传下载文件
  12. iOS 系统方法获取当前位置经纬度
  13. 2020届部分校招IC笔试题
  14. ACO-OFDM与DCO-OFDM的区别
  15. 成成你好呀(C知识点整理二)
  16. WebP 文件及其编码解码工具(WebPconv)
  17. SpringBoot(3) 获取后台返回字符串对象及json数据
  18. 大型欧姆龙PLC NJ系列ST语言Ethercat总线24轴 伺服电池生产线欧姆龙PLC程序大型程序NJ系列
  19. iOS - 使用自定义字体-苹方字体
  20. CarbonData 使用性能测试

热门文章

  1. Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode 1.1. 不个网页title保存成个个文件的时候儿有无效字符的问题... 1
  2. Atitit html5.1 新特性attilax总结
  3. Atitit各种SDM 软件SDP sdm的ddd tdd bdd设计
  4. paip.html 及css调试工具---debugbar
  5. (转)《Billions》第二季回归,现实中的SAC也回来了
  6. 关于julia的路径问题,往往很重要!
  7. Kafka从上手到实践 - Kafka CLI:Topic CLI Producer CLI | 凌云时刻
  8. caffe matlab 崩溃,终于搞定caffe了(window官方版win7+VS2013)
  9. 【配送路径规划】基于matlab帝企鹅算法求解冷链配送问题【含Matlab源码 201期】
  10. 【疲劳检测】基于matlab行为特征疲劳驾驶检测【含Matlab源码 944期】