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 "/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")]
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:Authentication failed. Caused by
GSSException
: 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")
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
思考 阅读(2775)
评论(1) 编辑 收藏 所属分类:
Grid Computing