GT4开辟:重新开始举行彼此的身份考据[Java编程]
本文“GT4开辟:重新开始举行彼此的身份考据[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
网格安全底子设备(GSI)是 Java 通用安全服务(Generic Security Service,GSS-API)的实现.GSS 用来在彼此通信的利用程序之间安全地交换消息,它在各种底层安全机制(比方 Kerberos)之上供应了对安全服务的一致拜候.在本文中,您将学习若何利用 GSI/GSS-API 扩大和代理证书构建自己的客户机-服务器利用程序.这是网格中间件所利用的基本身份考证机制.
通过模拟举行身份考证
代理证书 是一种模拟证书.模拟(Impersonation)是一种安全技术,答应实体 A 对别的一个实体(实体 B)举行受权,让 B 可以对其他实体举行考证,就仿佛 B 是实体 A 一样.换而言之,B 模拟了 A.
因此为什么我们会但愿利用模拟技术呢?这是因为它有助于办理分布式网络中关于身份考证的两个重要问题:
单点登录 为什么单点登录这么重要呢?假定一个用户需求在多个资源上运行某个进程,利用单点登录,用户只需求一次身份考证,而不用对每个资源都举行身份考证.
拜托 之所以需求利用拜托是因为进程需求代表用户举行身份考证.因此,必须向其拜托所需的权利.
为便于注释,假定一个用户在两个主机之间启动一个远程履行服务.这个服务需求代表用户在资源上利用单点登录举行身份考证,然后必须将自己的权利拜托给这两个主机,这样它们便可以彼此举行身份考证了.代理证书让您可以实现这种任务.
彼此举行身份考证
当双方都具有数字证书并且都信任对这些证书举行签名的证书声望(CA)时,这两个实体可以履行彼此身份考证从而彼此证明它们就是自己声称的那个实体.信任签名 CA 实际上意味着它们必须有一些 CA 证书的拷贝(包含公钥),并且信任这些证书确切来自这些 CA.两个实体(A 和 B)之间的彼此身份考证历程以下所示:
A 成立一个到 B 的衔接.要启动身份考证历程, A 将自己的证书发送给 B.这个证书声明了 A 的身份、公钥和用来证明该证书的 CA.
B 通过查抄 CA 的数字签名来确保该证书是有效的,从而确保该 CA 对这个证书举行了签名,并且这个证书并没有被篡改过,从而确保这个证书是有效的.(B 必须信任对 A 的证书举行签名的 CA).
B 通过生成一条随机消息并将其发送给 A,恳求 A 对其举行加密,从而确保 A 确切是证书所标识的人. A 利用自己的私钥对这条消息举行加密,并将后果发回给 B.B 利用 A 的公钥抵消息举行解密.假如解密后的消息与本来的随机消息相同,那么 B 便可肯定 A 就是它声称的那个身份(B 信任 A 的身份).
第 3 个步骤中相同的操作必须按照相反的次序再履行一次.
目前,A 和 B 就已经彼此举行了身份考证.
代理证书
代理证书包含一个新证书,此中包含一个新公钥以及一个新私钥.这个新证书包含一个改正过的全部者的身份,它是由全部者举行签名的,而不是由 CA 举行签名的.代理证书具有以下特点:
有限的生命期 它具有一个特定的终止时间,之后这个代理就不再有效了.
未加密的私钥 由于代理很长时间内都不是有效的,因此其私钥就不需求像全部者的私钥一样安全地举行保存.因此,可以利用一个未加密的私钥将其存储在暂时空间中,只要存放私匙的文件权限禁止任何人查看该私匙.
一旦成立之后,用户便可以利用代理证书和私钥来举行身份考证,而不需求输入密码.
代理证书是对 Globus 项目所成立的 Transport Later Security(TLS)协议的扩大.Globus 结合 Global Grid Forum 一同工作,使得代理成为 TLS 的一个尺度扩大,这样 GSI 代理便可以与其他 TLS 软件一同利用了.
构建自己的启用 GSI 的客户机服务器
我们在这里要构建的利用程序名字是 Client 和 Server.它们是利用 Java 编程语言编写的,需求 Commodity Grid (CoG) Kit 所供应的 GSI 实现和支持库.构建自己的启用 GSI 的利用程序非常简单.Client 和 Server 的骨架可以分化为以下内容:
读取号令行参数
在客户机和服务器之间成立 socket 衔接来传输数据
加载代理证书
成立安全上下文
假如需求,安全地交换消息
排除工作
读取号令行参数
Client 和 Server 的 main 办法需求做的第一件事也是最简单的事是读取号令行参数.
Client 需求利用两个参数:主机名和要衔接的端口.
清单 1. Client 的主机名和端口
// load arguments
if (args.length < 2)
{
System.err.println("Usage: java {options} Client "
+ " {hostName} {port}");
System.exit(-1);
}
String hostName = args[0];
int port = Integer.parseInt(args[1]);
Server 需求一个参数:监听衔接利用的端口号.
清单 2. Server 端口号
// read the command-line arguments
if (args.length != 1) {
System.err.println("Usage: java {options} Server {localPort}");
System.exit(-1);
}
int localPort = Integer.parseInt(args[0]);
成立 socket 衔接
Java GSS-API 为成立和注释标志(不透明的字节数据)供应了办法.这些标志包含双方之间安全交换的消息,不过实际举行标志传输的办法取决于交换双方.关于我们的目的来说,在客户机和服务器之间成立了一个 socket 衔接,并利用从 socket 流和安全上下文中构造的流来交换数据.
Client 需求成立一个到 Server 的 socket 衔接,并从中提取输入/输出利用的流,以下所示:
清单 3. Client 成立一个到 Server 的 socket 衔接
Socket socket = new Socket(hostName, port);
DataInputStream inStream =
new DataInputStream(socket.getInputStream());
DataOutputStream outStream =
new DataOutputStream(socket.getOutputStream());
System.out.println("Client: Connected to server "
+ socket.getInetAddress());
服务器利用程序成立了一个 ServerSocket 来监听这个端口,利用下面的方法给出参数:
ServerSocket ss = new ServerSocket(localPort);
ServerSocket 然后可以等候并承受一个来自客户机的衔接,然后对 I/O 流举行初始化,以便今后与客户机举行数据交换.
以上是“GT4开辟:重新开始举行彼此的身份考据[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |