级别: 初级 Vladimir Silva (vsilva@us.ibm.com), OGSA 开发承包商
2004 年 2 月 01 日 网格安全基础设施(Grid Security Infrastructure,GSI)使得计算机网络上的安全认证和通信成为可能。Globus Toolkit 的一个组件为网格提供了几种有用的服务,包括相互认证和单点登录。不过,在 Windows 环境中用 Globus Toolkit 3.0(GT3)生成网格证书是很麻烦的事。它一般要求系统管理员或者用户在 Linux 系统上安装 GT3 以使用命令行脚本生成证书。然后必须将这些证书转移到 Windows 系统中。本文展示了一种由 Java CoG Kit 提供的容易的替代方法:用一个 Java 类创建并签名网格代理和证书。
GSI 证书基础
网格安全基础设施(GSI)基于像公钥加密、X.509 证书和安全套接字层(Secure Sockets Layer,SSL)这样的经过实践证明的标准。对这些标准进行了扩展以实现单点登录和委派。
GSI 认证的一个主要概念是证书。每一个网格服务和用户都是通过证书来识别的,这个证书包含进行认证和识别这个用户或者服务所使用的信息。
GSI 证书包含这样的信息:
- 一个主题(subject),它标识证书所代表的人员或者对象。
- 属于这个主题的一个公钥。
- 签发这个证书的认证机构(Certificate Authority,CA)的标识。CA 证明公钥和标识都属于这个主题。
- 指定 CA 的数字签名。
一个第三方认证机构用于证明证书中公钥与主题之间的关系。要想了解 Globus Toolkit 安全基础设施的概况,请参阅本文
参考资料中列出的“Overview of the Grid Security Infrastructure”。
用 Java 类生成证书
在 GT3 中的 Java CoG Kit 1.1 构建的 API 可以生成用户证书或者证书请求、对证书签名和创建代理。如果不希望使用在 Globus Web 网站提供的基于 UNIX 的简单 CA,那么可以用这个证书作为 Java CA 实现的基础。
清单 1 展示了如何开始创建
CertificateGenerator 类。
创建自签名的用户证书和私钥
设置 GSI 的第一步是创建一个签名的用户证书和一个私钥。在后面要用这两个参数生成一个 Globus 凭证,也称为
代理(proxy),它提供了对网格资源的访问。
在 UNIX 系统中,脚本
$GLOBUS_LOCATION/bin/grid-cert-request.sh 会首先创建一个
证书请求(certificate request),必须将它提交给 Globus 认证机构(Globus Certificate Authority)进行签名。
CA 证明您就是您所宣称的那个人。在这个示例类中,我们将使用
COM.claymoresystems.cert.CertRequest
类制作一个“自签名”的用户证书和用用户密码加密的私钥。
清单 2展示了这种技术。
一个对
CertRequest.generateKey("RSA", 512, Pwd, bw, true);
类的调用可以完成这个技巧。这个调用的参数的意义如下:
- 用于生成 (RSA) 的密码。
- 以位计的证书密钥的强度 (512)。
- 用于加密私钥的密码。
- 缓存的 writer 用于存储私钥。
注:
CertificateRequest 类包含在随 GT3 Java CoG kit 发布的
puretls.jar 压缩文档中。
这个调用将返回一个
KeyPair 对象,可以在后面的指令中用这个对象生成自签名的证书:
CertRequest.makeSelfSignedCert(kp,makeGridCertDN(m_OrgUnit, m_CommonName), 31536000) 。
用户证书和私钥都以 64 PEM 格式加密。更多信息请参阅
java.security.* 类和
writePEM 函数。
从用户证书创建凭证
有了用户证书和私钥,我们就可以创建代理了。注意包
org.globus.security.* 已被弃用(deprecated)并为
org.globus.gsi.* 所替代,后者使用了开放源代码网格安全服务(Grid Security Services,GSS)。更多细节请参阅本文
参考资料中的“Security Library Compatability”。
清单 3中的方法将创建一个与 GT3 或者 GT 2.2x 兼容的凭证。
如果有一个(从您的 UNIX 系统中下载的)PEM 加密的代理文件,那么可以用
清单 4 中的一个工具方法构建一个
GlobusCredential 对象。
创建证书请求
您可能希望将证书提交给另一个 CA 进行签名。
清单 5中的函数展示了创建它的方法。
我们的证书生成器是用
清单 6中的工具函数实现的,它可用于以下任务:
- 以 PEM 格式编码证书字节。
- 创建通用目的的 X.509 名或者 DN。
创建证书生成器主函数
清单 7 提供了展示如何创建
CertificateGenerator 主函数的代码。
清单 7 中的代码需要在您的 classpath 中有以下 JAR 文件(它们都随 GT3 发布):
- cog-jglobus.jar
- cryptix32.jar
- cryptix-ans1.jar
- jce-jdk13-117.jar
- log4j-core.jar
- puretls.jar
运行这个类会生成
清单 8中的输出。
结束语
本文给了您一个理解网格安全基础设施工作过程的一个出发点。可以修改这里展示的 java 代码以实现自己的安全或者证书认证服务。这些 API 基于像 PKI 和 X.509 这样经过验证的开放源代码标准。更多信息请参阅 Globus 站点的
GSI页。
参考资料
关于作者  | |  | Vladimir Silva 出生在厄瓜多尔的基多。他于 1994 年从陆军工学院(Polytechnic Institute of the Army)获得系统分析员(System's Analyst)学位。同年,他作为交换学生来到美国,在中田纳西州立大学(Middle Tennessee State University)学习计算机科学。毕业后,他加入了 IBM "Web-Ahead" 技术智囊团。他的兴趣包括网格计算、神经网络和人工智能。他还拥有包括 OCP、MCSD 和 MCP 在内的众多 IT 证书。可以通过
vsilva@us.ibm.com与 Vladimir 联系。
|
对本文的评价
|