快速业务通道

用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
ntBytesCount + 1;      finalBytes = new byte[integerBytesCount];      finalBytes[0] = (byte)0x02;      for (int i=0; i < lengthBytes.length; i++)        finalBytes[i+1] = lengthBytes[i];      for (int j=lengthBytesCount+1; j<integerBytesCount; j++)        finalBytes[j] = byteContent[j-(lengthBytesCount+1)];      return finalBytes;    }//getIntegerBytes    // Converts a long into a byte array.    public byte[] getByteArray (long l)    {      byte byteValue[] = new byte[8];      for(int x=0; x<8; x++)        byteValue[x] = (byte)(int)(l >>> (7 - x) * 8 &  255L);      return byteValue;    } }//KerberosClient class

用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求(13)

时间:2011-08-05 IBM Faheem Khan

在本系列的 第一篇文章 对图 2、清单 1 和表 2 的讨论中我讨论过 TGT 请求的结构。回想在那里的 讨论中,TGT 请求包含四个数据字段: pvno 、 msg-type 、 padata 和 req-body 。生成 pvno 和 msg-type 字段非常简单,因为这两个字段分别只包含一个整数(如在 第一篇文章 中“请求 TGT”一节 中提到的, pvno 为 5, msg-type 为 10)。

您只需要调用 getIntegerBytes() 方法,向这个方法传递这个整数值。 getIntegerBytes() 方法返 回以 ASN.1 字节数组表达的 INTEGER 结构,您将它传递给 getTagAndLengthBytes() 方法。这个方法将 返回 pvno 或者 msg-type 字段的完整 ASN.1 表达。这就是我在清单 12 中的 getTicketResponse() 方 法的开始时生成 pvno 和 msg-type 字段的方法。

在生成 pvno 和 msg-type 字段后,下一步就是生成 padata 字段。这个字段是可选的。大多数 KDC 服务器有一个设置选项,可以对单独的客户机进行配置。系统管理员可以将 Kerberos 服务器设置为特定 客户可以发送不包括 padata 字段的 TGT 请求。

为了减轻在资源有限的 J2ME 设备上的处理负担,我假定电子银行有一个允许无线移动用户发送不带 padata 字段的 TGT 请求的 Kerberos 服务器(并且我将在本系列的下一篇文章中展示如何设置 Keberos 服务器使它具有这种行为)。因此我将在要生成的 TGT 请求中略去 padata 字段。所以,在生成 pvno 和 msg-type 字段后,我就直接开始生成 req-body 结构,这需要几步。

生成请求正文

在清单 12 的 getTicketResponse() 方法中,我的请求正文( req-body 结构)生成策略是生成结构 的所有单独的子字段,然后将它们串接到一起并包装到一个 SEQUENCE 中以构成请求正文。

回想在 第一篇文章 图 2 的讨论中, req-body 的子字段有(去掉了一些可选字段):

kdc-options cname realm sname till nonce etype

我将按它们在上面列表中的顺序生成这些字段。因此,第一项任务是生成 kdc-options 字段。

因为我不想使用任何 KDC 选项,所以我不需要对生成 kdc-options 字段进行任何逻辑处理。我只是 使用一个全为零的 5 字节数组作为其内容。看一下清单 12 的 getTicketResponse() 方法中 byte noOptions[] = new byte [5]; 这一行。这个方法实例化一个名为 noOptions 的 5 字节数组,它初始化 为五个零。

下一行( byte kdc_options[] = getTagAndLengthBytes (ASN1DataTypes.Context_Specific, 0, getBitStringBytes(noOptions)) )执行两项任务:

它首先向 getBitStringBytes() 方法传递 noOptions 字节数组,它返回用 ASN.1 的位字符串表达的 5 个零。

然后它将位字

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号