跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

在 WebSphere Application Server 中使用 Web 服务安全性

Sanjay Bose (boses@us.ibm.com), 高级解决方案工程师, IBM Enterprise Integration Solutions
Sanjay Bose 从事 IBM 的几个关键的开发岗位,他当前是 IBM Enterprise Solutions 团队的高级解决方案工程师。他主要负责帮助 IBM 客户和商业伙伴了解 Web 服务,以便构建基于 SOA 的解决方案并加速这些实现的商业价值。在此之前,他在 WebSphere Application Server 和 WebSphere Portal 的开发团队中工作,并领导 WebSphere Competency Center(WCC)中的 Web Services 专家小组。另外,他还参加了下一代网络研究项目,该项目负责起草 WSXL 和 WSIA Web 服务规范。

简介: 本文描述了如何利用 Web 服务安全性规范来保护现有的 Web 服务的安全。其中演示了如何使用 IBM WebSphere Application Server V5.0.2 中的 Web 服务安全性所提供的消息级安全性(MLS)来对消息进行签名(使用基于 X.509 的数字签名),从而保证消息的完整性;以及如何使用 XML 加密法来加密消息,从而保证消息的机密性。同时也阐述了如何使用 SSL/HTTP 提供的传输级安全性,以便一前一后地使用这两种预防措施。

发布日期: 2004 年 4 月 01 日
级别: 初级
访问情况 : 925 次浏览
评论: 



本文描述了如何利用 Web 服务安全性规范来保护现有的 Web 服务的安全。其中演示了如何使用 IBM WebSphereApplication Server V5.0.2 中的 Web 服务安全性所提供的消息级安全性(MLS)来对消息进行签名(使用基于 X.509的数字签名),从而保证消息的完整性;以及如何使用 XML 加密法来加密消息,从而保证消息的机密性。同时也阐述了如何使用 SSL/HTTP提供的传输级安全性,以便一前一后地使用这两种预防措施。

引言


Web服务是一些虚拟软件组件,可以通过各种协议和格式对它进行访问和调用。这些组件所处的环境各不相同且是分布式的。因此,需要一个安全通信基础架构来确保这些组件之间的消息(和内容)的安全性。

Web 服务安全性(Web Services Security ,WS-Security 或 WSS) 十分灵活,可以将它设计成一个基础平台,可以在此平台上构建各种安全模型,包括公钥基础架构(PKI)、Kerberos 和安全套接字层(SSL)。特别是,WS-Security支持多种安全性令牌、多种信任域、多种签名格式以及多种加密技术。

这个规范提供了三种主要机制:

  • 安全性令牌传播
  • 消息完整性
  • 消息机密性。

这些机制本身并不提供完整的安全性解决方案。相反,WS-Security 是一个构件,它可以与其他的 Web 服务扩展及更高层的特定于应用程序的协议一起使用,从而提供各种各样的安全性模型和加密技术。这些机制可以独立使用(例如,用于传递安全性令牌),也可以非常紧密地集成在一起(例如,签名和加密消息,以及提供与用于签名和加密的密钥相关联的安全性令牌层次)。

本文假定您具有一定的 Web 服务、J2EE 技术及 WebSphere® Application Server V5.0.2的基本知识。通过阅读本文,您将会理解如何在现有的基础架构上使用 WS-Security,同时也将了解一种声明性的编程模型,即 WebSphereApplication Server V5.0.2 提供保护应用程序的通信基础架构。

WebSphere Application Server V5.0.2中的 WS-Security


WebSphere Application Server V5.0.2通过一种声明性模型来使用 WS-Security。这种模型的创建和修改可以通过 WebSphere Studio ApplicationDeveloper Version 5.1、WebSphere Application Server V5.0.2中可用的应用服务器工具包(ASTK)或 WebSphere 管理控制台来完成。为了更深地理解这一技术,我们将在此描述一下手动过程。

可以传播的安全性令牌是 Username 令牌、基于 X.509 的证书以及轻量级第三方验证(LTPA);同时还有一个 API来为用户定义的令牌提供插件。消息完整性是由基于 PKI 的数字签名提供的(目前还不支持对称密钥签名),而消息机密性是由 XML 加密法提供的。

WebSphere安全性处理程序通过读取已声明的部署扩展来获取配置和实施 WS-Security 基础架构,如图 1 所示。它们被实现为基于 WebSphere 运行时的 JAX-RPC处理程序,并且对于应用程序开发人员是透明的。


图 1. WebSphere Application Server V5.0.2 中的 WS-Security
图 1. WebSphere Application Server V5.0.2 中的 WS-Security

样本帐户服务


WebSphereApplication Server V5.0.2 有一种方便而强大的方式来启用 WS-Security,从而为应用程序的通信链路提供MLS。它可以让您获取现有的任何服务的 Web 服务描述语言(WSDL),并为您提供必要的 WS-Security 扩展和绑定来保护 Web服务客户端和服务器之间的消息。

本文假定已经有了一个要应用 WS-Security 必须启用的 Web 服务。这里使用的示例服务是AccountService,它是由一个假设的银行(SomeBank)提供的。

AccountService 是一个简单的 Web服务;出于演示的目的,它并没有执行真正的业务处理。它包含一个简单的操作 accountEnquiry,这一操作获取 AccountRequest消息并返回 AccountResponse 消息。AccountRequest 消息包含有 AccountID 和 AccountType 信息。AccountResponse包含有帐户信息传递之后的结算。accountEnquiry 操作并没有执行任何基于请求消息的处理,而是返回一个固定的结算值12345.0。然而,这些消息是很重要的,因为我们将要使用 tcpmon(一个真正监听消息的实体)来监控它们在线路中传送的情况--首先看采用不安全的消息格式的情况,然后再看具有各种WS-Security 配置的情况。

为了演示的方便,我们在服务中将 accountEnquiry 操作作为四个独立的端口公开;配置WS-Security 之后就会使用这些端口。然而,对于不安全的服务来说,所有的端口都是相类似的。在为 AccountService 配置WS-Security 时会讨论这些端口。

我们先来安装 AccountService 和它的客户端。

安装和运行不安全的服务


要安全和测试不安全的 AccountService,您需要执行以下的操作:

  1. 下载 WSS-Sample.zip 文件并将其解压到一个临时文件夹中。
  2. 使用 WebSphere 管理控制台来安装企业应用程序 AccountService(即 SomeBankService.ear 文件)。可在 code/service 目录下安装。请确保选择的是缺省的选项,并在安装后保存配置。
  3. 使用控制台来启动企业应用程序。
  4. 打开一个浏览器,访问 http://localhost:9080/SomeBankService/services/SomeBankPort 来测试服务是否可用 。如果您得到消息“And now ... Some Services”,就表明您已经成功地配置了 SomeBank AccountService。
  5. 您还可以访问 http://localhost:9080/SomeBankService/services/SomeBankPort?WSDL 来检查 AccountService WSDL 是否可用。该 WSDL 必须和 附录所示的WSDL 相类似。

安装和运行不安全的客户端


要安装 AccountService 的客户端,您需要执行以下的操作:

  1. 使用 WebSphere 管理控制台来安装 Web 应用程序(即 SomeBankClient.war 文件)。可在 code/client 目录下安装。在安装 WAR 文件时,请确保在 Web 模块中键入 Context Root。请选择缺省值,并在安装后保存配置。
  2. 使用控制台启动 Web 应用程序。
  3. 打开一个浏览器,访问 http://localhost:9080/<context-root> 来测试一下客户端是否正确安装。
  4. 您将会看到图 2 所示的屏幕。
    图 2. AccountService 客户端
    图 2. AccountService 客户端
  5. 客户端的缺省选择是可用的,可以用它们来测试刚刚安装的 AccountService。单击 Submit,您将会看到如图 3所示的结果页面。
    图 3. 客户端结果页面
    图 3. 客户端结果页面

现在我们已经成功地安装了服务和客户端,现在让我们回顾一下客户端的输入选项:

  • Account ID and Account Type: 这些是虚构的输入,因为服务响应是固定的。但是它们也是重要的,因为在您使用 tcpmon 来监控消息时您将会看到它们。
  • Message Encryption: 在配置 WS-Security 之后打开线路中的消息的 XML 加密,从而提供消息的机密性。
  • Message Signing:在配置WS-Security 之后打开线路中的消息的 XML 数字签名,从而提供消息的完整性。
  • Service Port:指向基于 HTTP的端口,在这一端口中服务是可用的。您可以使用这一选项来指向一个 tcpmon 代理端口(将在下面讨论),以便观察 Web服务请求和响应消息。
  • Transport Protocol:用于选择是否使用 SSL。如果选中 HTTPS,则客户端就会被局限于使用 WebSphere内部 SSL 端口 9443。显然,如果这样选择的话, tcpmon 就不能够在线路中观察消息了。

因此,同时使用 MLS 和 TLS 来配置安全性选项时会有八种组合,由以下选项构成:

  • XML加密 [启用/禁用]
  • 数字签名 [启用/禁用]
  • SSL [启用/禁用]。

这使得客户端具有足够多的选择来观察 WS-Security 机制。

使用 tcpmon 来观察消息


tcpmon 是 WebSphereApplication Server V5.0.2 附带的一个实体。通过代理端口, tcpmon 可以用于查看和检查 SOAP消息(请求和响应)。

要配置 tcpmon 以便在不安全的场景中监控消息,您需要执行以下的操作:

  1. 检查 <WAS_HOME>/bin 目录中是否有一个 tcpmon.bat 文件。如果有,则直接执行步骤 3。
  2. 将清单 1 复制和粘贴到一个文件中,从而创建 tcpmon.bat 文件。

    清单 1. tcpmon.bat 的源代码

    @REM Copyright IBM Corp. 2002 ,2003
    @setlocal
    @echo off
    SET CONSOLE_ENCODING=-Dws.output.encoding=console
    call "%~dp0setupCmdLine.bat"
    "%JAVA_HOME%\bin\java" %CONSOLE_ENCODING% "-
    Dws.ext.dirs=%WAS_EXT_DIRS%;%WAS_USER_DIRS%" -classpath 
    "%WAS_HOME%"\lib\webservices.jar;"%WAS_CLASSPATH%";"%CLASSPATH%" 
    com.ibm.ws.bootstrap.WSLauncher com.ibm.ws.webservices.engine.utils.tcpmon
    @endlocal
                                

  3. 运行 tcpmon.bat 程序,您将会看到图 4 所示的屏幕。
    图 4. Tcpmon 管理窗口
    图 4. Tcpmon 管理窗口
  4. Listen Port #字段中键入可用的端口(例如,9999)。
  5. Target Hostname字段中键入 localhost
  6. Target Port #字段中键入 9080
  7. 单击 Add,这样就会显示一个面板,该面板监听端口 9999 并将请求转发给 localhost:9080。
  8. 现在,请切换到显示 AccountService 客户端的浏览器,在 Service Port字段中键入端口 9999 。单击 Submit
  9. Account Service 客户端具有如上所述的行为。在 tcpmon 面板中,请注意请求(上面板)和响应(下面板)消息,如图 5 所示。
    图 5. Tcpmon 显示截获的消息
    图 5. Tcpmon 显示截获的消息

请仔细观察这些消息,特别是 SOAP 头部和主体。找出请求的 SOAP 主体,它包含请求参数 accountIDaccountType 。同样,也检查响应的SOAP 主体。

因为并没有配置 WS-Security,在客户端选择 Message Signing 和 MessageEncryption 选项就会在线路上创建同样的消息。

现在您已经可以轻松地运行服务和客户端,并使用 tcpmon 来截获和检查在线路中流动的 SOAP 消息,接下来您就可以将 WS-Security 应用到 AccountService。


应用 WS-Security


将WS-Security 应用到 AccountService 之前,请先回顾一下 WebSphere 的 AccountService WSDL 和IBM 声明性 Web 服务扩展。

仔细观察 WSDL


清单 2 显示了要启用 WS-Security 关键的 WSDL 部分。在该服务中使用了四个不同的端口来演示 MLS 的所有组合,即:

  • 只有数字签名(使用 WSS 数字签名来保证消息的完整性)。
  • 只有 XML 加密(使用 WSS XML 加密来保证消息的机密性)。
  • 同时使用数字签名和 XML 加密(保证消息的完整性和机密性)。
  • 没有消息级的安全性。

实际应用中,您可能不需要在一个操作中定义所有不同的安全性配置。然而,为了演示 WS-Security支持的所有组合,本示例在一个操作中引进了多个服务端点。

清单 2. 来自 AccountService WSDL 的 SomeBank 服务部分

<!--  SomeBank Account Service Definition -->
<wsdl:service name="
        SomeBankAccountService">
 
<!--  Signed Port Declaration  -->
  <wsdl:port binding="bank:SomeBankBinding" name="
        SomeBankPortSigned">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/SomeBankPortSigned" /> 
  </wsdl:port>
<!--  Encrypted Port Declaration  -->
  <wsdl:port binding="bank:SomeBankBinding" name="
        SomeBankPortEncrypted">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/SomeBankPortEncrypted" /> 
  </wsdl:port>
<!--  Signed and Encrypted Port Declaration  -->
  <wsdl:port binding="bank:SomeBankBinding" name="
        SomeBankPortSignedAndEncrypted">
    <wsdlsoap:address location=
"http://localhost:9080/SomeBankAccountService/services/
SomeBankPortSignedAndEncrypted" /> 
  </wsdl:port>
<!--  Unsecured Port Declaration  -->
  <wsdl:port binding="bank:SomeBankBinding" name="
        SomeBankPort">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/SomeBankPort" /> 
  </wsdl:port>
</wsdl:service>
                
      

WSDL Service 部分中要注意的重要属性以 黑体突出显示。WebSphereApplication Server V5.0.2 的 IBM 扩展和绑定中的 WS-Security 声明会用到这些重要属性的引用。

观察 WebSphere Web Services 安全性扩展


在应用 WS-Security 之前,有必要遍历一下关键的 Web 服务部署描述符文件。图 6 显示了各种描述符的一个拓扑视图。


图 6. WebSphere 中的 JSR101 和 JSR109 构件
图 6. WebSphere 中的 JSR101 和 JSR109 构件

Enterprise Web services for J2EE(JSR109)规范引入了一个名为 webservices.xml 的 Web服务部署描述符。这个文件定义了一组 Web 服务,这组服务将会部署在一个启用了 Web services for J2EE的容器中。这个文件是在指定服务器角色时由 WSDL2Java 工具生成的。这个文件作为模块部署描述符打包在同一个目录下,即 EJB 模块的 META-INF 和 WAR 模块的 WEB-INF

同样地,对于客户端,JSR109 引入了 webservicesclient.xml 文件。 webservices.xml 部署描述符包含服务引用实体。这些实体声明了 Web、EJB或应用程序客户端容器所使用的 Web 服务引用。 webservicesclient.xml 文件也是作为模块部署描述符打包在同一个目录下。

除了这些标准部署描述符以外,IBM 还提供了服务和客户端的扩展,如图 7所示。对于服务端,IBM 提供 ibm-webservices-ext.xmi 文件(定义服务使用的扩展)和 ibm-webservices-bnd.xmi 文件(定义这些扩展的绑定的生效)。同样地,对于客户端,IBM 提供了 ibm-webservicesclient-ext.xmiibm-webservicesclient-bnd.xmi 文件。


图 7. 用于 WebSphere Application Server V5.0.2 的 IBM Web 服务扩展
图 7. 用于 WebSphere Application Server V5.0.2 的 IBM Web 服务扩展

为了启用 WSS,本文只考虑 IBM 扩展文件。由于部署描述符并没有标准化,所以 IBM 只能通过 J2EE 扩展来规定WS-Security。为了避免需要生成基于 X.509 的证书和 keystore,本文重复使用作为 WebSphere ApplicationServer V5.0.2 安装的一部分的样本 keystore 文件。该样本 keystore 基于 JCE(Java Cryptography Extension) keystore (JCEKS)和标准 JDK 中的传统 keystore(JKS)。基于JCEKS 的 keystore 是用于进行 XML 加密,而基于 JKS 的 keystore 是用于进行 XML 数字签名。这些 keystore位于 %WAS_HOME%\etc\ws-security\samples 目录下。

保护服务


根据为服务选定的容器的种类(EJB或 Web),生成的描述符文件放在相关的模块目录中(分别对应于 META-INFWEB-INF )。SomeBank AccountService使用基于 Java bean 的实现,它们是在 WebSphere Web 容器中运行的。

首先,应用 WS-Security 扩展。在启用了 WSS 的 AccountService 中执行以下步骤,并在 AccountService的每一个端口应用期望的安全性特性:

  1. 备份 code/service/ 目录下的文件。
  2. 进入解压缩的样本目录 code/snippets/service
  3. ibm-webservices-ext.xmiibm-webservices-bnd.xmi 文件复制到 code/service/BankWAR/WEB-INF 目录下。单击 Yes覆盖它。
  4. 进入 code/service/BankWAR 目录,执行以下的命令:

    %WAS_HOME%/java/bin/jar cvf..\SomeBankService.war WEB-INF META-INF

  5. 进入 code/service 目录,执行以下的命令:

    %WAS_HOME%/java/bin/jar cvfSomeBankService.ear SomeBankService.war META-INF

  6. 在得到的 EAR 文件中运行端点启用程序。

    %WAS_HOME%/bin/endptenablerSomeBankService.ear

  7. 打开 WebSphere 管理控制台,停止并卸载不安全的 AccountService。应用这些更改以后请保存主配置。
  8. 重启 WebSphereApplication Server。
  9. 现在,您可以按照安装不安全的 AccountService 的步骤安装启用了 WSS 的 AccountService。
  10. 运行同样的测试,同时也检查 WSDL 响应,如前所述。

现在,检查一下刚刚复制的 WS-Security IBM扩展文件。在启用了 WSS 的 AccountService 中不需要修改代码,注意到这一点是很重要的。它是由 WebSphere提供的纯声明性的优雅机制。

原始的 ibm-webservices-ext.xmi 文件只包括在 WSDL服务部分定义的每个服务端点的空元素。对于每个服务端点,根据期望的消息级安全性来应用相应的 WSS 声明。

现在,请检查一下启用了 WSS的 ibm-webservices-ext.xmi 文件(在 code/snippets/service 下可用)。因为服务会使用“对称的”安全性,所以每个端口都拥有一个请求子元素( <securityRequestReceiverConfig> )和一个响应子元素( <securityResponseSenderServiceConfig> )。

对于已签名的端口 SomeBankPortSigned,服务端点希望只在 SOAP 消息的主体部分应用消息完整性( <requiredIntegrity> 元素)。

对于已加密的端口 SomeBankPortEncrypted,服务端点希望只应用加密来提供消息机密性( <requiredConfidentiality> 元素)。通过指定 bodycontent ,只对 SOAP 消息的主体进行加密。

SomeBankPortSignedAndEncrypted端口同时使用上面提到的签名和加密元素来提供消息的完整性和机密性。

您必须为这些已声明的安全性构件提供一个绑定。第二个文件 ibm-webservices-bnd.xmi 包含了这些绑定。这些绑定是由样本 keystore 和认证链来构建的,这些样本 keystore 和认证链是 WebSphere ApplicationServer V5.0.2 安装的一部分。根据端口的特性,会使用基于 X.509 的证书来签名和加密消息。

如果要将这种方法进行延伸并将它应用到您自定义的 Web 服务上,您只需修改 IBM扩展文件,并根据您期望的安全性特性来复制相关的节。确保您复制的节是正确且相容的(在样本中为方便您使用,它们已做分区和注释)并将它同时应用到 *.ext*.bnd 文件中。

保护客户端


在保护客户端之前,请先使用以下的练习来测试启用了 WSS 的服务不响应不安全的客户端的预期情况。在客户端中选择 Message Signing 或Message Encryption 选项,然后单击 Submit(记住:WS-Security 配置为这两个选项的组合)。这样客户端就不会获得响应,同时日志文件显示相关的安全性故障。

请在启用了 WSS 的客户端中执行以下的步骤:

  1. 备份 code/client/ 目录下的文件。
  2. 进入解压的样本目录 code/snippets/client
  3. ibm-webservicesclient-ext.xmiwebservicesclient-bnd.xmi 文件复制到目录下。单击 Yes来覆盖它。
  4. 进入 code/client 目录,执行以下的命令:

    %WAS_HOME%/java/bin/jar cvfSomeBankClient.war WEB-INF META-INF *.jsp *.GIF

  5. 打开 WebSphere 管理控制台,停止并卸载不安全的客户端。在应用更改以后保存主配置。
  6. 重启 WebSphereApplication Server。
  7. 现在,您就可以按照前面安装不安全的客户端的步骤安装启用了 WSS 的客户端。
  8. 按先前的方式测试客户端,选择 Message Encryption 和Signing 单选按钮来测试 WSS 功能。

ibm-webservicesclient-ext.xmiibm-webservicesclient-bnd.xmi 文件包含了一些实体,这些实体和前面检查的服务扩展文件中的每个端口的相关实体相类似。

使用 tcpmon 来检查安全的消息


像前面那样启动 tcpmon ,并配置代理端口来检查和WSS 相关的 SOAP 消息。确保您提供的代理端口和在样本客户端中的 Service Port 字段中输入的值是一样的。

当您只选择Message Signing 选项时,您会发现 WSS <Security> 元素已经放在请求和响应的 SOAP 头部中。这一安全性元素包含 <Signature> 子元素,而这子元素包含XML 数字签名。SOAP 主体中的参数值依然是明文。XML数字签名只是保证了消息的完整性。这意味着在请求者向提供者发起消息的路径或相反路径中,消息均没有被篡改。为了方便,这些消息也可以通过在 code/tcpmon/signed.xml 文件中查看到。

当您只选择 Message Encryption 选项时,您将会在 SOAP 头部中再次看到 WSS <Security> 元素。然而,这一次它包含的是 <Encrypted> 元素,这一元素包含关于密钥、密码等信息。另外,SOAP主体并没有这些参数的明文。SOAP 主体中的请求和响应已经被加密,并且包含在 <EncryptedData> 元素中。XML Encryption 提供了机密性,它确保请求者和提供者之间传递的消息不会被窃听(就像 tcpmon !)。为了方便,这些消息可在 code/tcpmon/encrypted.xml 文件中查看到。

最后,同时选择 Message Encryption 和 Signing 选项。这一次,在 SOAP 头部的 WSS <Security> 元素中同时显示了 <EncryptedKey><Signature> 元素。SOAP 主体被加密,不能够通过读取它来窃取参数。因此,这一选项同时提供了消息的完整性和机密性。这些消息也可在 code/tcpmon/signed+encrypted.xml 文件中查看到。

如果这些选项都没有启用,那么消息就和前面所检查的不安全的消息一样了。


应用传输级安全性


Web 服务安全性基础架构只提供消息级的安全性。要启用TLS 需要有其他的步骤。

样本代码已经激活,可以启用 HTTPS/SSL。您可以检查 code/client/WEB-INF/classes/com/somebank/SomeBankServlet.java 文件。

您还需要为客户端 JVM 设置某些 SSL 相关的特性,以便它知道协议处理程序和 keystore 的位置。清单 3中的代码片段使用 WebSphere 附带的 store 来为它的 Web 服务器提供缺省安全性。在任何 SSL相关的客户端调用之前都必须对这些特性进行初始化;进行初始化的一个很好的位置是在基本 servlet 的 init 方法中,如 SomeBankServlet类所示。

清单 3. 设置 SSL 特性的代码片段

System.setProperty("java.protocol.handler.pkgs", 
 "com.ibm.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.keyStore",  
 "etc\\DummyClientKeyFile.jks");
System.setProperty("javax.net.ssl.keyStorePassword","WebAS");
System.setProperty("javax.net.ssl.trustStore",
 "etc\\DummyClientTrustFile.jks");
System.setProperty("javax.net.ssl.trustStorePassword",
 WebAS");
                

接下来,客户端访问的端点需要指向 SSL 端口,比如: https://localhost:9443/SomeBank/services/BankService/SomeBankPortSigned 。实现方法有两种:

  1. 在定位器文件( SomeBankAccountServiceLocator.java )中修改端点字符串。
  2. 修改代码,从而在客户端存根中动态地设置端点(样本就是采用这种方式)。以下的代码片段演示了这种方式:

    ((javax.xml.rpc.Stub) portTypeSigned)._setProperty(END_POINT, getLocatorURL(dataBean)+"/SomeBankPortSigned");

getLocatorURL方法检查是否选择了 HTTP 或 HTTPS,也检查客户端是否返回完整格式的 URL 以待使用,例如 https://localhost:9443/SomeBankService/services/SomeBankPortSigned


结束语


在 WebSphereApplication Server V5.0.2 中,Web服务安全性的应用程序是非常简单,这主要是由于使用了声明性模型来启用安全性基础架构。它将应用程序开发和安全性方面完全分开了。

WS-Security 增加了处理开销并延长了响应时间。因此,应该根据应用程序用况的强制性要求有选择地使用WS-Security。然而,如果特定的场景真的有必要使用的话,可以通过在部署描述符文件中附加 IBM 扩展来支持 WS-Security。由于 Web服务安全性已在 J2EE 中被采用,所以 IBM 将会通过标准的基于 J2EE 的部署描述符来提供 IBM 扩展。


附录

SomeBank 帐户服务 WSDL

<?xml version="1.0" encoding="UTF-8" ?> 
<wsdl:definitions targetNamespace="http://somebank.com" 
 xmlns="http://schemas.xmlsoap.org/wsdl/" 
 xmlns:bank="http://somebank.com" 
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
 xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--  Import the Schema for the messages -->
<wsdl:types>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	  elementFormDefault="qualified">
        <xs:element name="AccountRequestElement" type="bank:AccountRequest" /> 
        <xs:complexType name="AccountRequest">
            <xs:sequence>
                <xs:element name="accountID" type="xs:string" />
                <xs:element name="accountType" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="AccountResponseElement" type="bank:AccountResponse" /> 
        <xs:complexType name="AccountResponse">
            <xs:sequence>
             <xs:element name="balance" type="xs:float" />
            </xs:sequence>
        </xs:complexType>
    </xs:schema>
</wsdl:types>
<!--  Account Request Message sent from the client -->
<wsdl:message name="AccountRequest">
 <wsdl:part element="bank:AccountRequestElement" name="request" /> 
</wsdl:message>
<!--  Account Response Message sent from the service -->
<wsdl:message name="AccountResponse">
 <wsdl:part element="bank:AccountResponseElement" name="response" /> 
</wsdl:message>
<!--  SomeBank AccountQuery Porttype -->
<wsdl:portType name="SomeBankPortType">
    <wsdl:operation name="accountEnquiry" parameterOrder="request">
        <wsdl:input message="bank:A
ccountRequest" /> 
        <wsdl:output message="bank:AccountResponse" /> 
    </wsdl:operation>
</wsdl:portType>
<!--  SomeBank binding for AccountQuery -->
<wsdl:binding name="SomeBankBinding" type="bank:SomeBankPortType">
    <wsdlsoap:binding style="document" 
	    transport="http://schemas.xmlsoap.org/soap/http" /> 
        <wsdl:operation name="accountEnquiry">
            <wsdlsoap:operation soapAction="" /> 
                <wsdl:input>
                    <wsdlsoap:body use="literal" /> 
                </wsdl:input>
                <wsdl:output>
                    <wsdlsoap:body use="literal" /> 
                </wsdl:output>
            </wsdl:operation>
</wsdl:binding>
<!--  SomeBank Account Service Definition -->
<wsdl:service name="SomeBankAccountService">
 
<!--  Signed Port Declaration  -->
<wsdl:port binding="bank:SomeBankBinding" 
 name="SomeBankPortSigned">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/SomeBankPortSigned" /> 
</wsdl:port>
<!--  Encrypted Port Declaration  -->
<wsdl:port binding="bank:SomeBankBinding" 
 name="SomeBankPortEncrypted">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/SomeBankPortEncrypted" /> 
</wsdl:port>
<!--  Signed and Encrypted Port Declaration  -->
<wsdl:port binding="bank:SomeBankBinding" 
 name="SomeBankPortSignedAndEncrypted">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/
	SomeBankPortSignedAndEncrypted" /> 
</wsdl:port>
<!--  Unsecured Port Declaration  -->
<wsdl:port binding="bank:SomeBankBinding" 
 name="SomeBankPort">
    <wsdlsoap:address location=
	"http://localhost/SomeBankAccountService/services/SomeBankPort" /> 
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
                



下载

名字大小下载方法
WSS-Sample.zip.2 MBHTTP

关于下载方法的信息


参考资料

关于作者

Sanjay Bose 从事 IBM 的几个关键的开发岗位,他当前是 IBM Enterprise Solutions 团队的高级解决方案工程师。他主要负责帮助 IBM 客户和商业伙伴了解 Web 服务,以便构建基于 SOA 的解决方案并加速这些实现的商业价值。在此之前,他在 WebSphere Application Server 和 WebSphere Portal 的开发团队中工作,并领导 WebSphere Competency Center(WCC)中的 Web Services 专家小组。另外,他还参加了下一代网络研究项目,该项目负责起草 WSXL 和 WSIA Web 服务规范。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=55467
ArticleTitle=在 WebSphere Application Server 中使用 Web 服务安全性
publish-date=04012004
author1-email=boses@us.ibm.com
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。