英语原文共 9 页,剩余内容已隐藏,支付完成后下载完整资料
移动设备上的web服务安全
Jens Bertram, Carsten Kleiner
University of Applied Sciences and Arts Hannover
Ricklinger Stadtweg 120
30459 Hannover
Germany
E-Mail: ckleiner@acm.org
摘要:移动设备上的企业应用通常需要通过消费网络与其他系统组件进行通信服务。由于目前大多数移动设备平台(如Android)不提供用于消费SOAP服务的内置功能,扩展必须被设计。另外为了适应不断增强的企业应用程序的安全需求,在客户端能够处理SOAP Web服务安全扩展很重要。在本文中,我们将展示Android Web服务客户端的内置SOAP功能不能足以满足企业应用程序的需求,也不能像平台那样支持必要的安全功能。经过讨论现有的不同扩展使得Android设备具有SOAP能力,我们可以解释为什么它们都不是一个能令人满意的企业背景。然后我们提出我们自己的解决方案,它不仅适用于SOAP,还适用于SOAP之上的WS-Security。我们的解决方案在很大程度上依赖于代码生成,一方面以保持SOAP的灵活性优势,另一方面仍然保持软件开发的可管理性。我们的方案提供一个除了在Android平台上安全外,还能实施在其他SOAP扩展上的基础。此外,我们基于gSOAP框架的解决方案可能以类似的方式用于其他移动平台。
2011由Elsevier Ltd.出版。由[名称组织者]负责选择和/或同行评审。
关键词:Web服务;SOAP;WS安全;安卓;Gsoap; Ksoap;企业级应用
- 引言
目前在移动设备上使用的大多数应用主要用于消费目的。可以预期在不远的将来会有越来越多的企业应用程序。随着移动应用程序与其他软件组件交流的的需求,特别是关于安全功能需求的这个新领域出现,企业环境通常基于业务流程进行组织他们自己整合了的许多不同的系统组件。这种低耦合的软件系统实现部分流程并将其作为服务提供给其他组件。通常这些是基于SOAP的网络服务,因为SOAP是一种标准化且与平台无关的协议,在过程中可以提供和使用灵活多样的功能服务接口。此外,客户端消费服务可以(半)自动生成。这大大减少了客户端在初次实施和维护期间所需的工作量。代码生成也需要实现软件代理商自主编排服务的愿景。
上述讨论已经说明了是需求是基于SOAP Web服务,而不是基于REST的企业环境中的服务。 HTTPS提供的传输层安全性(实质上是唯一可用于REST服务的安全性方面)对安全性方面可能足以满足个人应用程序的要求,但不能足以满足企业应用程序的更高级安全性要求。这些要求是通过其他众所周知的Web服务安全规范(例如[1,2])建立在SOAP上来实现的。
总之,企业移动应用程序应该是能够适当地将SOAP集成到现有业务流程中。此外(部分)这些应用程序应自动生成,以便在复杂的服务接口更改时更加灵活,并加速整个应用程序开发过程。为了安全方面,必须支持相应的规范。其他众所周知的网络服务规范对于类似的非功能性要求(例如服务质量)同样适用。
不幸的是,目前现有的移动平台(如iOS和Android)无法解决这些问题。他们中的大多数根本不支持本地SOAP服务。此外,目前还不支持WS-Security等高级规范([3])。这个事实的一个潜在原因可能是移动设备的最近发展主要集中在消费者的需求上。尽管如此,对于许多公司来说,如何将这些与SOAP相关的功能添加到移动平台,以在他们现有的业务流程中利用移动设备,仍然是一个非常重要的问题
在本文中,我们将展示如何扩展当前的移动设备平台以解决这些缺点。我们专注于Android平台,因为它被广泛使用,并且在目前的市场中有最高增长率。我们将比较Android的本地功能和外部库和工具,以便解决如何添加对SOAP的支持和扩展规范的问题。之后,我们将详细介绍我们的解决方案,该方案能为Android自动生成SOAP客户端,并且支持WS-Security规范,。该解决方案基于gSOAP工具包,该工具包可应用于多种平台。因此,我们预计我们的方案也可以轻松转移到其他移动设备平台。
- 相关工作
我们的工作所依赖的重要参考资料是几个众所周知的Web服务规范。在接下来,无论在哪里介绍它们,都将直接引用。对于大多数桌面平台,确实存在几个支持实现安全SOAP客户端所需的全部功能的Web服务框架。据我们所知,除了Windows Mobile 6 / Phone 7上的.NET框架之外,这些框架都没有扩展到移动设备平台。尽管如此,该平台上的支持仅限于特定的安全配置,并且目前的市场份额相当有限。 [3]中已经介绍了不同平台上的选项概述。
至今还没有在移动设备上使用SOAP服务发布过很多工作。这些论文和在线文章通常描述了特定服务的SOAP客户端的实现。这些应用程序通常不使用客户端代码生成,而是手动实现客户端。我们认为这是有限的使用,因为使用SOAP的主要原因就是它的灵活性。因此改变
服务不应该要求完全重新实现客户端。出于这个原因,我们的工作重点是(尽最大可能)提供为了客户端存根自动生成代码的解决方案。因此在这里我们没有引用那些不使用代码生成的引用。
一些相关的工作集中在评估和改进SOAP Web服务的性能,以迎合移动网络所宣称的小带宽。在[4]中提出了一种减少开销的WSSecurity替代方案。在[5]中报告了在iPhone手机上REST和SOAP之间的详细性能比较。我们认为现在和将来这不是重要的意义,因为与已经存在在智能手机上的视频流相比,XML消息很小。
我们的工作最初是由一个研究项目激发的,当时我们面临着在具有特定安全功能的移动设备上实施SOAP客户端的挑战。该项目的目标是实现一种隐私保护软件系统,用于支付即车驾驶汽车保险,其保险费基于保单持有人的驾驶行为计算。驾驶行为通过移动设备上的GPS定位进行评估。该设备通过SOAP服务被集成到保险软件中,这些服务中的安全功能是保单持有人隐私保护模式中的一部分。关于这个系统的细节已经在[6,7]中描述。
- 在Android上实现SOAP客户端
3.1. Android的板载功能
Android OS基于Linux内核,它封装了硬件特定的问题并提供了线程,用户和权限管理,I / O等基本概念。除了这些核心功能外,Dalvik VM(DVM) - 特别定制的Java VM到移动设备的硬件属性 - 负责应用程序的执行。因此,Android应用程序是用Java编写和实现的,编译为Java Bytecode,然后编译为用于DVM的Bytecode,从而实现更小,更少的内存消耗代码。基于这个事实,Android API由一些平台特定的API和JavaSE API的一个子集组成。关于Web服务,后者包括XML解析器(DOM,SAX,XMLPull)以及典型的网络连接和协议,如TCP / IP和HTTP。此外,JSON [8] API可以使用更轻量级的XML替代格式。关于安全性,RESTful服务通常使用TLS / SSL [9]和HTTPS [10]进行保护。这种针对点对点安全上下文的方法也可在Android平台上使用。提供端到端安全性的更强机制对于RESTful服务不是标准化的,必须单独实施,例如,利用也包含在平台中的加密API BouncyCastle [11]。总之,Android平台为通常基于HTTP连接和XML或JSON作为消息格式的RESTful Web服务提供了很好的支持。
对于基于SOAP的Web服务,支持情况要差得多。忽略网络连接和XML API,平台没有提供使用基于SOAP的Web服务的选项。 从我们的角度来看,手动实现基于XML的SOAP消息的解析器代码并不是一个合适的解决方案,因此必须考虑外部库和工具来简化SOAP Web服务的消耗,例如。 通过生成客户端存根。 不幸的是,像Axis2这样成熟的SOAP引擎以及像wsdl2java这样的输出工具与Android不兼容。
3.2. 外部SOAP库
事实上,通过kSOAP2[12],只有一个项目简化了Android上SOAP的使用。该库封装了底层传输层的细节,提供了不同的消息(去)序列化机制并简化了SOAP错误处理。尽管如此,服务接口描述(WSDL [13])中定义的数据类型必须在提供的序列化机制的帮助下手动实现。这些机制的复杂性有所不同,有些更适合于简单类型,有些对于复杂类型是更好的选择,并且需要更高的实施效果。总而言之,kSOAP2是一种简单服务的完美解决方案,其接口复杂度有限。对于具有语义丰富和巨大消息的更复杂的服务,这个库不是一个适当的方法。关于安全功能,库还支持HTTPS的点对点安全。不支持WS-Security规范[1]中定义的应用层上的其他安全机制。
在我们的工作中,我们研究了一种替代解决方案,以便在Android设备上使用SOAP Web服务,同时还有存根生成过程的方便性。 这种方法主要依赖于C/C web服务工具包gSOAP [14]和Android NDK [15],它可以重用现有的C/C 代码和库或者执行关键性能强大的组件,如广泛的计算。 基于这种利用C/C 代码的能力,我们实现并扩展了生成C的gSOAP存根并将此存根封装在Java类中的过程。这一过程将在下面的章节中详细介绍。 关于安全方面,gSOAP安全插件提供了点对点(HTTPS)和端到端安全(WS-Security)。 考虑到Android平台的特点,这些问题将在第4节中介绍。
3.3. Web服务工具包gSOAP
首先,我们将简要介绍一下C/C Web服务工具包gSOAP [14],它是通过开源许可证授权的,在[16]有介绍。 出于商业目的,还有一个拥有不同支持级别的专有许可版本。 这为本文提出的用于商业应用和商业产品的方案提供了良好的基础。
该工具包专为有限硬件资源(如移动设备)的嵌入式系统而设计。由于gSOAP完全是用C/C 编写的,只有少量依赖项(主要是libc),因此该工具包可以在许多平台上移植,包括Windows,Linux,Unix,Mac OS等传统桌面和服务器系统以及一些或多或少过时的移动平台Symbian和Windows Mobile。最重要的两个工具是WSDL导入器(wsdl2h)和gSOAP编译器(soapcpp2),它们为客户端存根或服务器框架提供了自顶向下的生成方法。当我们专注于客户端实现时,我们将不会涉及本文中与服务器端相关的问题。
图1概述了使用gSOAP工具生成基于C/C 的Web服务存根的主要步骤。 首先,WSDL导入器wsdl2h将给定的WSDL转换为头文件,该文件将服务描述中定义的数据类型和操作映射到C/C 结构体/类和函数中。 基于头文件,gSOAP存根编译器使用所需的XML / SOAP(解除)序列化器生成特定的存根代码。 在我们的例子中,我们依赖于一个简单的基于C的存根。
3.4集成本地gSOAP存根库
由于Android在应用程序级别上不支持C代码,因此我们必须查看Android NDK。 如前所述,gSOAP具有很少的依赖性,基本上是标准C库libc。 幸运的是,这个库在Android平台和NDK中可用,因此我们可以继续编译以前生成的存根代码到本地库中。 然后可以将该库加载到Java应用程序中并通过JNI调用。 清单1显示了一个简单的简化HelloWorld示例,该示例通过生成的gSOAP存根控件,将其封装在JNI方法中进行服务调用。当调用该方法时,请求参数将被初始化并设置name属性。在服务调用成功的情况下,响应消息将打印在日志中输出。
如果编译成功,我们会得到一个额外的库文件,例如名为libgsoapJniHelloWorld.so。然后,这个库文件必须在应用程序启动时加载。 因此,如果是Android应用程序,应按照NDK文档中的说明将以下代码(列表2)放置在主要文件中
访问本地库及其方法被封装在一个单独的类文件中,如清单3所示
通过这个例子,我们有了第一个解决方案,通过JNI和生成的gSOAP存根在Android应用程序内调用SOAP Web服务。 不幸的是,使用这个解决方案,不可能在运行时改变任何参数并组成请求。 这是Web服务和各种分布式系统中的通信的基本特征。 在给出的HelloWorld示例中,可以使用额外的String参数扩展JNI方法以设置请求名称属性。 但是这种方法只适用于这种特定的服务,不能适应更复杂的服务,因此不是一个通用的解决方案。 我们不得不花费更多的精力通过JNI在Java类中封装基于C的存根。
3.5. 扩展存根生成过程
基于图1所示的gSOAP工具的存根生成,我们扩展了如图2所示的过程。我们开发了一个Python脚本,该脚本也生成Java类和中介层,用于Java和C之间的数据转换,两者都基于先前生成的gSOAP存根。 Java类映射C结构和方法,它们本身映射服务数据类型和操作。中间层(JNIAdapter)在很大程度上依赖于JNI并负责将Java对象转换为C结构体实例,反之亦然。使用Python的原因在于扩展代进程需要解析存根头文件(soapStub.h)。由于C代码的解析成本很高,不建议手动执行。使用gccxml1时,存在一个工具,可以生成C / C 源代码的基于XML的表示。这是向前迈出的一大步,但我们现在必须解析XML输出并处理它,以生成类和JNI代码。使用pygccxml [17],存在对gccxml的扩展,它提供了一个P
全文共12546字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[14639],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。