使用 Rational Application Developer 构建 HTTPS Web 服务: 第 2 部分:配置 HTTPS Web 服务

在本系列的第 2 部分,您将为 Web 服务应用程序配置 HTTPS。您将使用 iKeyman 创建自签署证书,并使用 IBM WebSphere® 管理控制台配置 SSL 设置。最后,您将在 Java™ 2 Enterprise Edition (J2EE) 和 Java 2 Platform Standard Edition (J2SE) 客户机测试 HTTPS Web 服务。

Henry Cui (henrycui@ca.ibm.com), 软件工程师, IBM Toronto Lab

Henry Cui photoHenry Cui 在 IBM 多伦多实验室的 Rational Application Developer 技术支持团队工作。他是 Rational Application Developer Web 服务工具支持团队的专家。他已经帮助很多客户解决过关于 Web 服务的设计,开发以及移植的问题。



2006 年 12 月 14 日

开始之前

关于本教程

如果您已经学习了本系列教程的第 1 部分,您就已经开发了以下程序:

  1. Web 服务 J2EE 客户机
  2. Web 服务 J2SE 客户机

本系列教程的第 2 部分将在第 1 部分的基础上进行,说明如何配置 HTTPS Web 服务。在第 2 部分,您将了解以下内容:

  1. 使用 iKeyman 为 Web 服务和 Web 服务客户机创建密钥存储、信任存储和证书。将服务器证书导入到客户机信任存储中。将客户机证书导入到服务器信任存储中。
  2. 为 Web 服务提供者创建 SSL 配置。
  3. 为 Web 服务客户机创建 SSL 配置。
  4. 修改 Web 容器,从而为 Web 服务提供者使用新 SSL 配置。
  5. 配置 Web 服务客户机部署描述符。
  6. 从 J2EE 客户机测试 HTTPS Web 服务。
  7. 从 J2SE 客户机测试 HTTPS Web 服务。

目标

在第 2 部分,您将使用 iKeyman 创建密钥存储、信任存储和证书,并从 WebSphere 管理控制台和 RAD Web services Editor 配置 HTTPS Web 服务。

先决条件

您需要安装具有最新补丁的 IBM Rational® Application Developer v6.0.1.1。如果不确定您的 Rational Application Developer 是否为最新的版本,请转到 IBM Rational Product Updater(以下称为 Product Updater)确定是否有新的更新可用。您可以通过以下路径启动 RPU:Windows“开始”菜单 >“所有程序”>“IBM Rational”>“Rational Product Updater”。启动了 RPU 后,可单击“Find Updates”确定是否有新的更新可用。

您还需要对集成 WebSphere Application Server v6.0 测试环境进行更新。缺省情况下,随 Rational Application Developer 提供的集成 WebSphere Application Server v6.0 测试环境的版本为 6.0.0。您需要将 WebSphere 测试环境更新到 6.0.2.5 或更高版本。如果您从未升级过您的 WebSphere 测试环境,可以使用 RPU 进行升级。相应的更新可以在 Product Updater 的“Optional Features”部分找到。


SSL 基础知识

SSL 协议基于公钥加密之上。它依赖于数字证书的存在。数字证书可提供各种有关其所有者的有用的标识信息。

此教程将使用 SSL 相互验证。对于相互验证,服务器必须向客户机提供其证书,以便客户机能够确定服务器的身份。客户机也必须向服务器提供自己的证书,以便服务器确定客户机的身份。

WebSphere 支持两种类型的密钥存储概念:密钥存储文件和信任存储文件。密钥存储包含证书以及每个证书关联的私钥的集合。信任存储包含认为可信的证书的集合,将在 SSL 连接初始化期间将其与提供的证书进行匹配,以便确认身份。对于相互验证,来自密钥存储的服务器公开证书将被导入到客户机的信任存储中。来自密钥存储的客户机公开证书将被导入到服务器的信任存储中。

对于本教程,我们将使用自签署证书。自签署证书可以用于涉及双方不需要第三方对其进行验证的受信任环境中。在实际的应用程序中,您可能需要获得涉及证书颁发机构 (Certificate Authority) 的实际证书。


部分 1. 使用 iKeyman 创建密钥存储、信任存储和证书

WebSphere Application Server 提供了两个用于管理密钥存储的工具:iKeyman 和 Keytool。我们将在本教程中使用 iKeyman。集成 WebSphere Application Server v6 测试环境 (WTE) 安装是非常瘦的一层,位于真正的独立 WebSphere Application Server v6 Base 安装之上。也就是说,WTE v6 可以被视为独立 WebSphere Application Server v6。iKeyman 实用工具位于 WTE v6 安装根目录 (%RAD install root%\runtimes\base_v6\) 的 bin 目录中。

  1. 在 C 目录下创建以下目录:
    C:\ClientTrustStore
    C:\ClientKeyStore
    C:\ServerKeyStore
    C:\ServerTrustStore
  2. 导航到 %RAD install root%\runtimes\base_v6\bin 目录,双击 ikeyman.bat,以启动 iKeyman。

    图 1. 启动 iKeyman
    启动 iKeyman
  3. 创建服务器密钥存储:
    选择 Key Database File > New,以打开新对话。
  4. 选择 JKS 作为密钥数据块类型,输入 ServerKeyStore.jks 作为 File Name,输入 C:\ServerKeyStore\ 作为 Location,单击 OK

    图 2. 创建服务器密钥存储
    创建服务器密钥存储

    提示密码时输入“sslwebsv”。

  5. 创建客户机密钥存储:

    选择 Key Database File > New,以打开新对话框,选择 JKS 作为 key database type,输入 ClientKeyStore.jks 作为 File Name,输入 C:\ClientKeyStore\ 作为 Location,单击 OK。提示密码时输入“sslwebsv”。

    创建服务器信任存储:
    选择 Key Database File > New,以打开新对话框,选择 JKS 作为 key database type,输入 ServerTrustStore.jks 作为 File Name,输入 C:\ServerTrustStore\ 作为 Location,单击 OK。提示密码时输入“sslwebsv。”

    创建客户机信任存储:
    选择 Key Database File > New,以打开新对话框,选择 JKS 作为 key database type,输入 ClientTrustStore.jks 作为 File Name,输入 C:\ClientTrustStore\ 作为 Location,单击 OK。提示密码时输入“sslwebsv。”

    图 3. 客户机和服务器信任存储/密钥存储之间的关系
    客户机和服务器信任存储/密钥存储之间的关系
  6. 为服务器创建自签署证书。

    选择 Key Database File > Open…
    Key database type:JKS
    File Name:ServerKeyStore.jks
    Location:C:\ServerKeyStore\
    单击 OK。输入 sslwebsv 作为密码。

    选择 Create > New self-signed certificate…,输入以下值:
    key label:WASServerCertificate
    Common Name:localhost
    Organization:IBM
    单击 OK
    图 4. 创建新的自签署证书
    创建新的自签署证书
  7. 提取服务器证书
    单击 Extract certificate… 按钮。
    Certificate file name:ServerCert.arm
    Location:C:\ServerKeyStore
    图 5. 将证书提取到文件中
    将证书提取到文件中
    单击 OK
  8. 将服务器证书导入到客户机信任存储中。

    首先,我们需要打开客户机信任存储:
    选择 Key Database File > Open…
    Key database type:JKS
    File Name:ClientTrustStore.jks
    Location:C:\ClientTrustStore\
    单击 OK。输入 sslwebsv 作为密码。

    然后,我们可以导入服务器证书:
    单击 Add… 按钮。
    Certificate file name:ServerCert.arm
    Location:C:\ServerKeyStore
    单击 OK
    提示标签名称时输入 WASServerCertificate

    图 6. 导入服务器证书
    导入服务器证书
  9. 为客户机创建自签署证书。

    选择 Key Database File > Open…
    Key database type:JKS
    File Name:ClientKeyStore.jks
    Location:C:\ClientKeyStore\
    单击 OK。输入 sslwebsv 作为密码。

    选择 Create > New self-signed certificate…,输入以下值:
    key label:WASClientCertificate
    Common Name:localhost
    Organization:IBM
    单击 OK
  10. 提取客户机证书
    单击 Extract certificate… 按钮。
    Certificate file name:ClientCert.arm
    Location:C:\ClientKeyStore
    单击 OK
  11. 将客户机证书导入到服务器信任存储中。

    首先,我们需要打开服务器信任存储:
    选择 Key Database File > Open…
    Key database type:JKS
    File Name:ServerTrustStore.jks
    Location:C:\ServerTrustStore\
    单击 OK。输入 sslwebsv 作为密码。

    然后,我们可以导入客户机证书:
    单击 Add… 按钮。
    Certificate file name:ClientCert.arm
    Location:C:\ClientKeyStore
    单击 OK。提示标签名称时输入 WASClientCertificate

部分 2. 为 Web 服务提供者创建 SSL 配置

  1. Servers视图中,右键单击 WebSphere Application Server v6.0 并从上下文菜单中选择 Run administrative console
  2. Admin Console 将随即打开。输入用户 ID。可以为任意内容(如 admin)。单击 Log in 按钮。
  3. 配置 SSL 的第一步是定义 SSL 配置存储库。存储库可以包含用于构建 SSL 连接的必要细节,如密钥文件的位置及其类型。从管理控制台中选择 Security > SSL,单击 New JSSE repertoire 按钮。
  4. 提供以下值来填充表单:
    - Alias:ServerWSRepertoire
    - 选中 Client authentication。此选项非常重要。client authentication 选项用于设置应用服务器是否预期获取客户机证书。选中此选项意味着我们将使用相互验证 SSL。
    - Key file name:C:\ServerKeyStore\ServerKeyStore.jks
    - Key file password:sslwebsv
    - Key file format:JKS
    - Trust file name:C:\ServerTrustStore\ServerTrustStore.jks
    - Trust file password:sslwebsv
    - Trust file format:JKS

    图 7. 配置 JSSE 存储库
    配置 JSSE 存储库
  5. 单击 Apply,并随后单击屏幕顶部的 Save

部分 3. 为 Web 服务客户机创建 SSL 配置

  1. 从管理控制台选择 Security > SSL,单击 New JSSE repertoire 按钮。
  2. 提供以下值来填充表单:

    - Alias:ClientWSRepertoire
    - Key file name:C:\ClientKeyStore\ClientKeyStore.jks
    - Key file password:sslwebsv
    - Key file format:JKS
    - Trust file name:C:\ClientTrustStore\ClientTrustStore.jks
    - Trust file password:sslwebsv
    - Trust file format:JKS
  3. 单击 Apply,并单击屏幕顶部的 Save

部分 4. 修改 Web 容器,从而为 Web 服务提供者使用新 SSL 配置

为了完成配置,我们需要修改 Web 容器,从而为 HTTPS 端口上的 Web 服务使用新 SSL 配置。

  1. 管理控制台中选择 Servers > Application Servers,然后单击 server1
  2. Configuration 选项卡上,转到 Container Settings 部分,展开 Web Container Settings 并单击 Web container transport chains
    可以看到,其中定义了缺省的安全传输链 WSInboundDefaultSecure。Web 容器将为此链侦听 TCP 端口 9443。通过单击 Transport Chain 页中的 New 按钮,您可以创建另一个传输链,并侦听不同的端口。本教程仅修改缺省端口上的 SSL 配置。
    图 8. Web container transport chain 页
    Web container transport chain 页
  3. 单击 WSInboundDefaultSecure
  4. 单击 SSL Inbound Channel (SSL_2)
  5. 单击 SSL repertoire 下拉菜单,并从列表中选择 [nodename]/ServerWSRepertorie,其中 [nodename] 为您的计算机的节点。请记下此 SSL 存储库的名称,因为我们将在下一部分中使用此名称。
    图 9. 设置 SSL 存储库
    设置 SSL 存储库
  6. 单击 Apply,并单击屏幕顶部的 Save
  7. 停止应用服务器。

部分 5. 配置 Web 服务客户机部署描述符

现在我们需要告知 Web 服务客户机使用我们在部分 3 中配置的 SSL 配置。

WebSphere Application Server 6 Web 服务客户机配置与 WebSphere Application Server 5 Web 服务的对应项不同,因为它基于 Web Services for J2EE(WSEE) V1.1 规范。在 WSEE 1.1 前,客户机模块使用自己的 Web 服务部署描述符来声明服务引用。WSEE 1.1 将这些声明移到了包含 Web 服务的模块中,例如 web.xml、ejb-jar.xml、application.xml。

SSL 配置已移到了 Web 服务部署描述符编辑器。Web 部署描述符编辑器是统一的用户接口,用于获取以下文件的内容:web.xml、ibm-web-bnd.xmi、ibm-web-ext.xmi、ibm-webservicesclient-ext.xmi 和 ibm-webservicesclient-bnd.xmi。

SSL 配置源位于 ibm-webservicesclient-bnd.xmi 中。

  1. 请展开 CalculatorWebClient 项目,双击 Deployment Descriptor:CalculatorWebClient
  2. 切换到 WS Binding 选项卡。在 Port Qualified Name Binding Details 部分中的 HTTP SSL configuration name 字段输入 [nodename]/ClientWSRepertoires,其中的 nodename 是计算机的节点。如果不确定,请转到管理控制台 > Security > SSL 查看 SSL 配置存储库的名称。
    请确保在名称 [nodename]/ClientWSRepertoires 之后没有包含额外的空格。
    图 10. Web 服务部署描述符编辑器
    Web 服务部署描述符编辑器
  3. 保存并关闭编辑器。

部分 6. 从 J2EE 客户机测试 HTTPS Web 服务

示例 JSP 客户机提供了相当不错的功能,其中之一就是设置 SOAP 端点。由于我们已经在 https://localhost:9443/ 启用了 HTTPS,因此可以使用示例 JSP 客户机来将 SOAP 请求发送到 HTTPS 安全端点。

  1. 启动 WebSphere Application Server 6.0
  2. 在 project Explorer 中,展开 CalculatorWebClient project > WebContent > sampleCalculatorProxy 文件夹。
  3. 右键单击 TestClient.jsp > Run > Run on Server.. >,选择 WebSphere Application Server v6.0 > Finish
  4. 在 Web 浏览器中,单击 getEndpoint() method > Invoke。所得到的结果为:
    http://localhost:9080/CalculatorWeb/services/Calculator
  5. 我们需要将 SOAP 请求发送到 HTTPS 安全端点。单击 setEndpoint(java.lang.String) 方法,为 endpoint 输入以下值并单击 Invoke
    https://localhost:9443/CalculatorWeb/services/Calculator
  6. 现在单击 addsubtract 方法进行测试。应该获得正确的结果。

部分 7. 从 J2SE 客户机测试 HTTPS Web 服务

要将 SOAP 请求发送到正确的 HTTPS 端口,可以调用代理类生成的 setEndpoint()。还需要设置 Java 系统属性来告知运行时使用哪个密钥存储和信任存储。

  1. CalculatorJavaClient 项目中创建一个新 Java 类 TestCalcSSL.java,并复制以下代码:
清单 1. TestCalcSSL.java
package com.ibm; 

import java.security.Security;
public class TestCalcSSL {
 public static void main(String[] args) throws Exception {
  try {
   CalculatorProxy proxy = new CalculatorProxy();
   proxy.setEndpoint("https://localhost:9443/CalculatorWeb/services/Calculator");
   System.setProperty("javax.net.ssl.trustStore",
   "C:\\ClientTrustStore\\ClientTrustStore.jks");
   System.setProperty("javax.net.ssl.trustStorePassword", "sslwebsv");
   System.setProperty("javax.net.ssl.keyStore",
   "C:\\ClientKeyStore\\ClientKeyStore.jks");
   System.setProperty("javax.net.ssl.keyStorePassword", "sslwebsv");
   System.setProperty("java.protocol.handler.pkgs",
   "com.ibm.net.ssl.internal.www.protocol");
   Security.addProvider(new com.ibm.jsse.IBMJSSEProvider());
   System.out.println("2 + 2 = " + proxy.add(2, 2));
   System.out.println("2 - 2 = " + proxy.subtract(2, 2));
   catch (Exception e) {
	 e.printStackTrace();
   }
  }
}
  1. 右键单击 TestCalcSSL.java > Run > Java Application,切换到控制台视图,将看到显示了正确的结果:
    2 + 2 = 4.0
    2 - 2 = 0.0

结束语

祝贺您!您已经完成了本教程的学习。我知道让 HTTPS Web 服务正确工作并不容易。您做得很棒!


下载

描述名字大小
Web Services sample codesamplecode.zip45KB

参考资料

学习

获得产品和技术

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


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


忘记密码?
更改您的密码

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

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

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

选择您的昵称



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

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

标有星(*)号的字段是必填字段。

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

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

 


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


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services, Rational
ArticleID=183754
ArticleTitle=使用 Rational Application Developer 构建 HTTPS Web 服务: 第 2 部分:配置 HTTPS Web 服务
publish-date=12142006