随笔-49  评论-67  文章-27  trackbacks-0

1       目的

在进行 Globus 项目开发的过程中,需要在 Windows 下通过 Web 服务调用 Globus 的服务(如 RFT )。但是在编写程序的时候遇到了一系列的问题。几经周折,终于搞定。遂将解决方法总计如下,以供大家参考。

2       证书问题

由于 Globus 的安全问题,需要使用证书才能访问服务。这里,有三种证书,分别是 CA 证书、用户证书和代理证书。我们可以从以及安装好 Globus Linux 主机上将用户证书(连同用户的私钥)和 CA 证书一同拷贝到 Windows 上使用。

用户证书和用户私钥通常位于用户根目录中:

$HOME\.globus\usercert.pem

$HOME\.globus\userkey.pem

用户证书和用户私钥用来生成代理证书。

CA 证书在校验用户证书的有效性时使用,位于

/etc/grid-security/certificates/a3989c00.0

代理证书是访问 Globus 服务时实际使用的证书,它可以通过上面的证书来生成。但是生成代理证书需要进行如下操作。

2.1    安装 ws-core

设置环境变量 GLOBUS_LOCATION

set %GLOBUS_LOCATION%=some_where_ws-core_installed

下载 ws-core-4.0.1-bin.zip (这里面的版本由需要决定)文件,解压到 %GLOBUS_LOCATION 目录下。

2.2    安装 cog-jglobus

设置环境变量 COG_INSTALL_PATH

set %COG_INSTALL_PATH=some_where_cog-jglobus_installed

http://wiki.cogkit.org 下载 cog-jglobus-1.4-bin.zip ,解压到 %COG_INSTALL_PATH 目录。

运行:

%COG_INSTALL_PATH\bin\setup

根据提示,指定用户证书、私钥, CA 证书以及代理证书的位置。

成功安装后,会在 Windows 用户根目录下生成 .globus 目录,并在该目录下建立一个 cog.properties 文件。该文件内容大致如下:

#Java CoG Kit Configuration File

#Tue Dec 12 18:34:00 CST 2006

usercert=C\:\\Documents and Settings\\Administrator\\.globus\\usercert.pem

userkey=C\:\\Documents and Settings\\Administrator\\.globus\\userkey.pem

proxy=C\:\\DOCUME~1\\ADMINI~1\\LOCALS~1\\Temp\\x509up_u_administrator

cacert=C\:\\Documents and Settings\\cert\\a3989c00.0

后面, grid-proxy-init 会根据这个文件来查找和生成证书。

如果没有正确设置 cog.properties 文件,会产生如下异常:

Exception in thread "main" . Caused by AxisFault

 faultCode: { http://schemas.xmlsoap.org/soap/envelope/}Server.userException

 faultSubcode:

 faultString: org.globus.common.ChainedIOException : Authentication failed [Caused by: Failure unspecified at GSS-API level [Caused by: Unknown CA]]

 faultActor:

 faultNode:

 faultDetail:

    {http://xml.apache.org/axis/}stackTrace:Authentication failed. Caused by Failure unspecified at GSS-API level. Caused by COM.claymoresystems.ptls.SSLThrewAlertException : Unknown CA

这是由于无法定位 CA 证书造成的。

2.3    生成代理证书

运行 grid-proxy-init 获得用户的代理证书:

%GLOBUS_LOCATION\bin\grid-proxy-init

这样可以在指定位置生成代理证书。通常这样生成的代理证书只有 12 小时的有效期。为了方便开发,可以加入 -hours 参数为代理证书指定一个相对比较长的有效期。

如果没有代理证书,就会抛出如下异常:

Exception in thread "main" org.globus.gsi.GlobusCredentialException: Proxy file (C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\x509up_u_administrator) not found.

    at org.globus.gsi.GlobusCredential.<init>(GlobusCredential.java:98)

       at org.globus.gsi.GlobusCredential.getDefaultCredential(GlobusCredential.java:526)

3       配置域名

由于在证书中使用了域名,如果此时域名服务器无法对服务器的 IP 地址进行解析,需要修改 hosts 文件来指定域名。

否则,会抛出类似如下的异常:

[main] ERROR delegation.DelegationUtil  - org.globus.common.ChainedIOException : Authentication failed [Caused by: Operation unauthorized (Mechanism level: Authorization failed. Expected "/CN=host/192.168.1.129" target but received "/O=Grid/OU=GlobusTest/OU=simpleCA-mci.uestc.edu.cn/CN=host/mci.uestc.edu.cn")]

Exception in thread "main" . Caused by AxisFault

 faultCode: { http://schemas.xmlsoap.org/soap/envelope/}Server.userException

 faultSubcode:

 faultString: org.globus.common.ChainedIOException : Authentication failed [Caused by: Operation unauthorized (Mechanism level: Authorization failed. Expected &quot;/CN=host/192.168.1.129&quot; target but received &quot;/O=Grid/OU=GlobusTest/OU=simpleCA-mci.uestc.edu.cn/CN=host/mci.uestc.edu.cn&quot;)]

 faultActor:

 faultNode:

 faultDetail:

    {http://xml.apache.org/axis/}stackTrace:Authentication failed. Caused by GSSException : Operation unauthorized (Mechanism level: Authorization failed. Expected &quot;/CN=host/192.168.1.129&quot; target but received &quot;/O=Grid/OU=GlobusTest/OU=simpleCA-mci.uestc.edu.cn/CN=host/mci.uestc.edu.cn&quot;)

4       配置 Eclipse

为了使程序可以正常执行,还需要对 Eclipse 工程进行配置。

4.1    指定 client-config.wsdd

Eclipse 工程的虚拟机参数中加入 -Daxis.ClientConfigFile=share\client-config.wsdd 来指定 client-config.wsdd 文件。可以从 Linux 上拷贝 $GLOBUS_LOCATION\client-config.wsdd 得到。

否则,会抛出如下异常:

[main] ERROR delegation.DelegationUtil  - No client transport named 'https' found!

Exception in thread "main" . Caused by AxisFault

 faultCode: { http://schemas.xmlsoap.org/soap/envelope/}Server.generalException

 faultSubcode:

 faultString: No client transport named 'https' found!

 faultActor:

 faultNode:

 faultDetail:

    {http://xml.apache.org/axis/}stackTrace:No client transport named 'https' found!

4.2    指定 ws-core 安装路径

Eclipse 工程的虚拟机参数中加入 -DGLOBUS_LOCATION=%GLOBUS_LOCATION 指定 Windows ws-core 的安装路径。

否则,可能抛出如下异常:

Exception in thread "main" Container failed to initialize. Caused by org.apache.axis.ConfigurationException : Configuration file directory '.\etc' does not exist or is not a directory or is not readable.

org.apache.axis.ConfigurationException : Configuration file directory '.\etc' does not exist or is not a directory or is not readable.

5       总结

以上是在 Windows 平台下基于 Web 服务开发 Globus 应用时遇到的问题以及解决办法。

posted on 2006-12-12 22:19 思考 阅读(2778) 评论(1)  编辑  收藏 所属分类: Grid Computing

评论:
# re: Windows平台下基于Web服务开发Globus应用[未登录] 2007-07-25 13:52 | 飞马
我也想在Windows 下通过 Web 服务调用 Globus 的服务(如 GRAM、RFT等),你本文没有提到如何具体编程调用RFT,能否公开一下,谢谢
我的msn:flyhorse2k@hotmail.com
希望能得到你的指导。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: