Web Services安全性方案及实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:liongliong596
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文主要探讨了Web Services的安全性问题以及解决方案。简要介绍了Web Services安全技术,提出了实现Web Services安全性的具体实现方案:包括利用用户名/密码来设定访问权限;对客户端IP地址进行过滤;以及使用加密数据传输方式来实现Web Services的安全。
  关键词:Web Services;Tomcat;Servlet;SSL协议
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2084-04
  Web Services Security Solutions and Realize
  DONG Yi-ge1, LIU Pei-xian2
  (1.Electronic Engineering Department, Science and Technology Engineering School, Beijing Vocational College of Electronic Science, Beijing 100016, China; 2.College of Information Science and Technology, Beijing Chemical Industry University, Beijing 100013, China)
  Abstract: This article on the Web Services security issues and solutions. Web Services gave a briefing on security technology, proposes a Web Services security of the concrete realization of the programme: including the use of ID / password to set up access; the client IP address filtering and use of encrypted data transmission means to achieve Web Services Security.
  Key words: web services; tomcat; servlet; SSL protocol
  
  1 Web Services安全性方案
  
  Web Services是在开放的Internet上运行的,这种环境即使受到防火墙的保护,也依然会受到黑客、计算机病毒的攻击。而且在商业环境中,每个Web服务的状态都可能涉及经济利益和商业机密,如网络购物服务中有电子货币信息;信息查询服务中有商业机密(如价格、货物种类等)。[1]在Web Services运行过程中,对其状态的非法读取和恶意修改都将对安全性构成严重的威胁。安全性的制约被公认为是阻碍Web Services模型被广泛使用的一个重要因素。[2]
  安全的Web服务是Web服务成功的必要保证。众所周知,Web服务是使用XML进行数据交换的,而XML在默认情况下是明文编码的;同时,大部分Web服务使用HTTP协议作为传输协议,同样,HTTP也是使用明文方式来传输数据的。这就造成了在不加密的传输协议上传输不加密的信息,从而使信息传输的保密性受到威胁。
  根据应用对安全要求的级别不同,可以采用不同的方式来实现安全性,本文采用了以下几种方式来实现Web Services的安全性:
  1) 利用用户名/密码来设定访问权限:J2EE Web应用默认的访问控制;
  2) 对客户端IP地址进行过滤:使用Servlet过滤器(Filter)进行访问控制;
  3) 使用加密数据传输方式来实现Web Services的安全:使用SSL/HTTPS协议来传输。
  使用访问认证机制来进行权限验证(包括利用用户名/密码来设定访问权限和对客户端IP地址进行过滤)对于安全级别要求不高的应用是可行的,它能够使用Web应用访问认证机制来进行权限验证,从而保护对资源的访问。但需要注意的是,虽然它们进行了身份验证,但信息的传递还是以明文的方式进行的,不能保证信息在传输过程中不被窃取。而SSL是一个安全的传输协议,使用它传输Web服务能保证信息不被第三方窃取。
  
  2Web Services安全方案的实现
  
  2.1 利用用户名/密码来设定访问权限
  在实现访问Web Services安全性问题上,我们首先想到的是使用身份验证来确认访问者的合法性。利用用户名/密码来设定访问权限:J2EE Web应用默认的访问控制。
  不管客户端通过什么API来调用Web服务,它总是先构造SOAP消息,然后通过HTTP POST方法把消息发送到Web服务的URL。而我们知道,不管Axis部署在哪种服务器上(Tomcat还是Websphere),它总是以Servlet方式来运行的。所以最简单实现Web服务安全的方式就是通过在Web应用的配置文件(web.xml)来实现访问控制。
  本文部署的Web Services是以Tomcat作为服务器的,以下阐述如何使用Web应用模型中基本认证方法来配置Web服务的安全访问。
  Web应用的基本认证是建立在J2EE角色和用户的基础之上,首先在Tomcat角色配置文件中增加一个角色和一个帐号。
  在tomcat-users.xml中增加角色(Tomcat_Home\conf\tomcat-users.xml)
  <?xml version='1.0' encoding='utf-8'?>
  <tomcat-users>
  …
  <role rolename="department-manager"/>
  <user username="dong " password="6666 " roles="department-manager"/>
  …
  </tomcat-users>
  上面配置代码在Tomcat配置文件中添加了一个department-manager角色,并且在此角色中添加了一个名为dong的用户。要使tomcat-users.xml中配置的角色和用户生效,需要配置Tomcat使用UserDatabaseRealm。打开Tomcat_Home\conf\server.xml配置文件,在GlobalNamingResources中添加以下描述:
  <GlobalNamingResources>
  ……
  <Resource name="UserDatabase" auth="Container"
  type="org.apache.catalina.UserDatabase"
  description="User database that can be updated and saved">
  </Resource>
  <ResourceParams name="UserDatabase">
  <parameter>
  <name>factory</name>
  <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
  </parameter>
  <parameter>
  <name>pathname</name>
  <value>conf/tomcat-users.xml</value>
  </parameter>
  </ResourceParams>
  </GlobalNamingResources>
  然后再web应用的部署描述符中指定Web服务资源的访问控制,如下所示:
  配置对Servlet的访问控制(AXIS_HOME\WEB-INF\web.xml)
  <security-constraint>
  <web-resource-collection>
  <web-resource-name>Tax Web service </web-resource-name>
  <url-pattern>/periodic </url-pattern>
  </web-resource-collection>
  <auth-constraint>
  <role-name>department-manager</role-name>
  </auth-constraint>
  </security-constraint>
  <login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>Axis Basic Authentication Area</realm-name>
  </login-config>
  <security-role>
  <role-name>department-manager</role-name>
  </security-role>
  url-pattern指定了需要通过角色验证的URL样式,在这里是"/periodic";role-name是能够访问制定URL的角色,这里是department-manager。以上配置实现只有角色类型是"department-manager"的用户才能访问URL样式为"/periodic"的Web服务。
  这样用户权限就设置完成了,在客户端调用服务时就必须添加用户名/密码来实现用户的身份认证。核心代码如下:
  String endpoint ="http://222.199.225.248:8080/axis/periodic.jws";//WSDL文件
  ……
  call.getMessageContext().setUsername("dong");//axis中的用户名。
  call.getMessageContext().setPassword("6666");//密码
  ……
  可以看出,通过使用call.getMessageContext().setUsername("peixian")来设置调用的用户名,通过setPassword来设置调用的密码。通过上面的代码可以看出,除了为Call对象设置的用户名和密码外,其它的代码和不使用访问控制时一样。如果用户名、密码不正确就不能调用服务了。
  2.2 对客户端IP地址进行过滤
  使用Servlet过滤器(Filter)进行访问控制Axis的Web服务端本质上是以Servlet方式在运行,所有我们完全可以在Web应用上部署一个Servlet过滤器,通过此过滤器来达到访问控制的效果。
  Web应用中的过滤器截取从客户端进来的请求,然后进行一系列处理,最后把请求发送到目标Servlet。过滤器可以说是外部进入Web服务器的第一道关口,它能决定请求是否继续向前转发,也能对请求中的信息进行处理。如果过滤器用于对Web服务进行访问控制,那么它能根据客户端信息决定目标的服务是否能调用成功。
  本文在这里开发的过滤器是根据客户端IP地址进行过滤,如果客户端的IP地址在限制范围中,那么就不能访问目标的Web服务。过滤器部分代码如下:
  package com.hellking.study.webservice;
  import javax.servlet.FilterChain;
  ……
  public class WebServicesFilter implements Filter
  {
  //没有权限访问的IP地址
  static final String[] deniedIPList=new String[]{"202.4.130.128"};
  public boolean isIPDenied(String ipAddr)
  {
  ……
  }
  //过滤处理的方法
  public void doFilter(final ServletRequest req, final ServletResponse res, FilterChain chain) throws IOException,ServletException
  {
  HttpServletRequest hreq = (HttpServletRequest)req;
  HttpServletResponse hres = (HttpServletResponse)res;
  //HttpSession session = hreq.getSession();
  String clientIp=req.getRemoteAddr();
  System.out.println("开始过滤……");
  if(isIPDenied(clientIp))
  {
  //验证不成功,不让用户登录。
  throw new ServletException("无权限访问此Web服务!");
  }
  else
  {
  //验证成功,继续处理
  chain.doFilter(req,res);
  } }
  ……
  }
  WebServicesFilter 过滤器限制了deniedIPList中指定的所有客户端。编写了过滤器后,需要在Web应用的部署描述符中指定使用此过滤器,并且把过滤器映射到目标URL上。也就是说除了编写Servlet过滤器实现类外,还需要在web.xml中对它进行配置,并且把过滤器映射到要过滤的目标URL上。以下是过滤器的部署描述符:
  <filter>
  <filter-name>WebServicesFilter</filter-name>
  <filter-class>com.hellking.study.webservice.WebServicesFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>WebServicesFilter</filter-name>
  <url-pattern>/ *</url-pattern>
  </filter-mapping>
  url-pattern指定了过滤器要过滤的范围。"/*"正是AxisServlet默认的URL。通过上面的配置,只要客户端调用Axis Web服务,就会被WebServicesFilter过滤器过滤。如果客户端IP地址在过滤器的deniedIPList中,那么就不能访问目标服务。
  2.3 使用SSL作为Web服务的传输协议
  目前大多数Web Services的实现都是以HTTP作为其传输层,因此常常结合HTTP原有的安全机制。目前,最流行最广泛使用的安全措施就是使用安全套接字层--SSL。
  SSL(Secure Sockets Layer)是由Netscape公司开发的一套Internet数据安全协议,目前版本是3.0,它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。总的来说,SSL 是创建安全通信的一种非常有效的方法。Microsoft XML Web Service 既支持客户端中的集成 SSL,也支持服务器中的集成 SSL[3]。以下是实现过程的具体描述:
  1) 下载并安装JSSE
  JSSE(Java Security Socket Extension)--Java安全套接字扩展,是Sun为了解决在Internet上的安全通讯而推出的解决方案。他提供了一套框架和Java版本的SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议的实现,也包括了广泛的功能,如:数据加密、服务器证明、消息完整性,以及可选的客户证明。使用JSSE,开发者能够提供一个基于任何协议之上(如:Hypertext Transfer Protocol(HTTP),Telnet,or FTP,over TCP/IP)的客户和服务器的安全数据通道。JSSE是基于安全算法和握手机制之上的合成体。JSSE能将危险的安全弱点降到最低点,并且减轻了开发者的负担,使得开发者可以很轻松的整合到程序中。
  本实验使用的是JSSE1.5.0版本,这里用它来产生Tomcat使用的秘钥对(keystore)。下载后将lib里面的jcert.jar、jnet.jar、jsse.jar 解压缩到%JAVA_HOME%\jre\lib\ext目录下完成JSSE的安装。
  2) 修改Tomcat配置文件中的web.xml
  Tomcat的conf目录包含不同的配置文件,在主要配置文件server.xml中默认的HTTP连接端口是8080,需要修改为HTTPS的连接端口8443。修改内容如下:
  将端口为8080的HTTP连接端口注释掉,加上下面这段代码:
  <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
  <Connector port="8443"
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
  enableLookups="false" disableUploadTimeout="true"
  acceptCount="100" debug="0" scheme="https" secure="true"
  clientAuth="false" sslProtocol="TLS" keystoreFile="C:\.keystore"/>
  3) 证书生成
  SSL协议可以分成两部分:握手和数据传输。握手建立一个包含发送方和接收方公钥密码值的安全上下文。然后数据传输使用源自这个安全上下文的共享密钥[4]。
  使用keytool可以帮助用户创建这些文件(该工具在Java的bin目录下):
  ① 在服务器端生成密钥对(KeyPair):
  %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
  ② 导出证书:
  keytool -export -alias tomcat -file tomcat.cer
  ③ 导入信任证书tomcat.cer到cacerts这个证书库:
  keytool -import -trustcacerts -alias tomcat -file tomcat.cer -keystore cacerts
  ④ 查看客户端cacerts证书项,确认含有tomcat这一证书:
  keytool -list -keystore cacerts
  此时,便完成了对tomcat的SSL配置。为了检验配置是否正确,我们启动tomcat的8443端口,访问:https://localhost:8443/,出现窗口如图1所示。
  选择“是”继续,直至出现Tomcat欢迎页面。到此为止,SSL配置成功。
  4) 部署并调用Web服务
  该Web Services部署过程与在HTTP上部署过程相同。只是生成的接口文件内容不同。因为接口文件是通过WSDL生成,而此时的WSDL已经是在加了安全协议上的描述文件。执行下面命令生成接口文件:
  java -cp Djavax.net.ssl.trustStore=C:\.keystore org.apache.axis.wsdl.WSDL2Java https://localhost:8443/axis/periodic.jws?wsdl
  注:若出现错误提示找不到有效的证书,则用Djavax.net.ssl.trustStore=C:\.keystore来指定证书所在的位置。
  
  3 结论
  
  随着Web Service的应用越来越广。其安全性逐步成为人们最关心的问题。本文根据应用程序的安全级别的不同,提供了三种安全措施,利用用户名/密码来设定访问权限;对客户端IP地址进行过滤;使用SSL作为Web服务的传输协议。SSL 可提供安全的连接,它允许两个通过网络连接的应用程序验证对方的身份以及对应用程序间交换的数据进行加密,是目前应用最为广泛的一种。通过以上三种安全措施,可有效提高系统的安全性。
  
  参考文献:
  [1] 黄九梅,李文婷,赵英.Web Services 客户端的实现与性能分析[J].中国科技信息,2006(9):148-149.
  [2] Thelin J.Identity,security,and XML Web Services[C]//O' Reilly Emerging Technology Conference,2003.
  [3] Birbeck M.XML高级编程[M].2版.裴剑锋,高伟,译.北京:机械工业出版社,2002.
  [4] David C.XML-Schema part of primer[EB/OL].(2001-05-02).http://www.w3.org/TR/2001/REC-xmlschema.
其他文献
摘要:介绍了Darwin streaming server(DSS)源码的架构和核心流程;详细分析了Darwin streaming server的关键技术:媒体封包和流量控制;最后给出了Darwin streaming server的应用实例。  关键词:RTP;流媒体;Darwin Streaming Server(DSS)  中图分类号:TP311文献标识码:A文章编号:1009-3044(
期刊
摘要:论文分析慢启动、拥塞避免、快速重传、快速恢复等四个拥塞控制阶段的特点。利用OPNET Modeler软件构建了一个简单的网络模型,在此基础上分别对Tahoe,Reno,New Reno,SACK等拥塞控制算法进行仿真,对比研究了它们各自的不同点。  关键词:OPNET仿真;拥塞控制;TCP  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2093-02  
期刊
摘要:本文基于Linux 2.4.19平台以及新型的移动终端应用处理器unity805plus,给出一种运用SUBB1400芯片中触摸屏控制器模块实现触摸屏驱动的方案。分别从硬件,软件的角度阐述了触摸屏驱动的初始化设置、中断以及后台进程、信号量在笔点击事件处理流程中的应用。  关键词:嵌入式Linux;触摸屏;字符设备驱动;UCB1400  中图分类号:TP391 文献标识码:A 文章编号:100
期刊
如果你使用的是最新版本的Chrome内核的Edge浏览器(下载网址:https://www.microsoftedgeinsider.com/zh-cn/download),那么可以体验到许多新鲜的功能,这里介绍两则比较实用的快捷技巧。  技巧一:一键打开相同的标签页  某些时候,我们需要同时打开多个相同的标签页,常规的步骤是复制页面地址后在新的标签页打开,操作相当烦琐,现在只需要右击当前标签页,
期刊
摘要:以《计算机图形学》这门课程为例,介绍多媒体CAI课件在计算机教学中的应用。文章重点论述了基于Authorware的多媒体教学软件的设计思路和交互式功能、ActiveX控件、知识对象等关键技术的实现。经过教学实践,该课件取得了较好的效果。  关键词: CAI;多媒体;Authorware;交互式;计算机  中图分类号:TP37文献标识码:A文章编号:1009-3044(2008)35-2067
期刊
摘要:模型检查工具SPIN的核心是PROMELA语言,对PROMELA语言执行方式的理解决定所描述系统模型的行为方式。该文从语义角度研究了 PROMELA语义引擎问题。首先给出PROMELA语法的抽象对象模型形式化定义,然后给出一个算法来实现PROMELA语法到抽象对象模型的映射,描述 了PROMELA指称语义。  关键词:模型检查;SPIN;PROMELA;语义  中图分类号:TP315文献标识
期刊
摘要:针对Lab Windows/CVI中的DataSocket技术和NI网络变量只能手工、静态分配采集端资源的问题。该文设计和实现了一个基于虚拟仪器的网络通信平台,使得多个客户端可以同时和多个采集端进行通信,并动态的申请和释放采集端资源。  关键词:Lab Windows/CVI;远程测控;动态资源分配  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2138
期刊
摘要:随着互联网时代的到来,网上答疑、在线考试等手段逐渐被采用;B/S结构比C/S结构具有简单、容易实现等优点;基于B/S结构,并采用ASP,NET技术,本文阐述了设计和实现教学辅助系统的过程。  关键词:B/S;ASP,NET;网上答疑;在线考试  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2008)01-100187-04
期刊
摘要:该文主要对Web前端开发中经常使用的浏览器端脚本语言JavaScript进行分析,讨论了其中闭包技术的使用,并结合IE浏览器中内存占用情况分析了不当使用闭包技术造成的内存泄漏情况及避免方法。  关键词:JavaScript;闭包;IE浏览器;内存泄漏  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2134-03  Closure in JavaScrip
期刊
摘要:文章在Linux台式机上实现了AP(Access Point)及其扩展功能,并在同一台主机上架设apache服务器,用perl语言编写CGI程序,使用户可以通过HTML页面远程配置主机,从而实现对AP功能的调整。简单的配置页面,降低了用户对Linux操作系统专业知识掌握程度的要求。实验在模拟现有AP产品功能的同时,增加了不需重新启动服务器,直接完成配置修改的功能,测试结果表明,这个改动提高了
期刊