快速业务通道

GT4开发:从头开始进行相互的身份验证 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
lient 的标记(这个标记是由 Server 调用 acceptSecContext 而生成的)。 将 initSecContext 所返回的标记(如果存在)发送给 Server 第一次调用 initSecContext 通常会生成一个标记。最后一次调用可能不会返回标记。 检查上下文是否已经建立 如果没有,Client 就会从 Server 接收另外一个标记,然后开始下一个循环迭代。 initSecContext 所返回的任何标记或从 Server 接收到的任何标记都被放入一个字节数组中,客户机和服务器应该将其作为不透明的数据对待,在客户机和服务器之间进行传递,并由 Java GSS-API 方法进行解释。交换消息需要使用一组 GSI I/O 流。

清单 8. GSI I/O 流gssout = new GSIGssOutputStream(outStream, context);gssin = new GSIGssInputStream(inStream, context);

byte [] inToken = new byte[0];byte [] outToken = null;

/** Establish a security context* 1. Client: sends a secure handshake token * 2. Server: receives handshake token* 3. Server: Sends hanshake token back to the client* 4. Client: receives handshake. Security context is established.*/while( !context.isEstablished() ) {outToken = context.initSecContext(inToken, 0, inToken.length);if (outToken != null) {gssout.writeToken(outToken);}

if (!context.isEstablished()) {inToken = gssin.readHandshakeToken();}}

System.out.println("Client: Security context Established! ");

另外一方面,服务器上下文循环会执行稍有不同的交互:

从 Client 接收一个标记 这个标记是 Client initSecContext 调用的结果。 调用上下文的 acceptSecContext 方法,将刚才接收到的标记传递给它。 如果 acceptSecContext 返回一个标记,Server 将这个标记发送给 Client,如果上下文尚未建立,就开始下一个循环。

GT4开发:从头开始进行相互的身份验证(3)

时间:2007-05-30 vampire_315 整理

清单 9. Server 将标记发送给 Client 并开始下一次循环迭加while (!context.isEstablished()) {token = gssIn.readHandshakeToken();token = context.acceptSecContext(token, 0, token.length);// Send a token to the peer if one was generated by// acceptSecContextif (token != null) {System.out.println("Server: Will send token of size "+ token.length+ " from acceptSecContext.");gssOut.writeToken(token);}}System.out.println("Server: Context Established! ");

安全交换消息

一旦在 Client 和 Server 之间建立一个安全上下文之后,它们就可以使用这个上下文来安全地交换消息了。有两种方法可以为安全交换准备消息:wrap 和 getMIC。实际上有两个 wrap 方法(和两个 getMIC 方法),二者之间的区别是输入消息的位置(一个字节数组或一个输入流)和输出消息的输出位置(一个字节数组返回值或一个输出流)的表示:

wrap 是消息交换使用的主要方法。签名是 byte[] wrap (byte[] inBuf, int offset, int len, MessageProp msgProp),其中 (inBuf) 是要发送的消息, (offset) 是消息开始的位置,(len) 是消息的长度,(MessageProp) 用来说明所需要的 Quality-of-Protection(QOP),并指定是否需要进行加密。SOP 值选择密码完整性和要使用的加密算法(如果请求使用)。对应于各种 QOP 值的算法是由底层机制的提供者指定的。例如,Kerberos V5 使用的值是在 RFC 1964 中定义的。通常指定 0 作为 QOP 的值来请求默认的 QOP。 getMIC 用来获取一个包含所提供的消息使用的密码 MIC 的标记。它通常用来与您这一端确认双方都有相同的数据,方法仅仅是为数据传输一个

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号