论文部分内容阅读
摘要:该文主要探讨了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.
关键词: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.