用 Kerberos 为 J2ME 应用程序上锁,第 3 部分: 建立与电子银行的安全通信(下)
2010-03-30 00:00:00 来源:WEB开发网getAuthenticationHeader() 方法有几个输入参数:
名为 ticketContent 的字节数组,它包含由 getAuthenticationHeader() 方法包装到认证头的 Kerberos 票据( TGT )。
名为 clientRealm 的字符串类型参数,它指定(生成这个请求的)Kerberos 客户机所注册的域(realm )的名字。
名为 clientName 的字符串类型参数指定生成这个请求的 Kerberos 客户机的名字。
checksumBytes 字节数组携带一个 Checksum 结构以及 getChecksumBytes() 方法。
encryptionKey 字节数组携带用于生成认证头的加密部分的加密密钥。
名为 sequenceNumber 的参数是一个 integer 值,它标识发送者的请求号。
在 第一篇文章的图 5 介绍过,认证头包含以下字段:
pvno
msg-type
ap-options
ticket
authenticator
现在让我们看看 清单 19 中的 getAuthenticationHeader() 方法实现是如何生成认证头的各个字段的( KRB-AP-REQ 结构):
首先要生成 pvno 字段,它有特定于上下文的标签号 0,并包装一个值为 5 的 ASN1 INTEGER 。调用 getTagAndLengthBytes() 方法执行这项任务。我将 pvno 字段存储 在一个名为 vno 的字节数组中。
类似地,两次调用 getTagAndLengthBytes() 方法生成 msg-type (特定于上下文的标签号 1)和 ap-options 字段(特定于上下文的标签号 2)。
下一行( byte[] ticket = getTagAndLengthBytes(ASN1DataTypes.Context_Specific, 3, ticketContent) )将票据结构包装到特定于上下文的标签号 3 中,这是认证头的第四个字段。
然后,必须生成认证头的第五个字段(名为 authenticator ,它有特定于上下文的标签号 4)。authenticator 字段是一个 EncryptedData 结构。authenticator 字段的纯文本格式是一个 Authenticator 结构。因此,首先生成纯文本格式的完整 Authenticator 结构,将这个纯文本 Authenticator 传递给 authorDigestAndEncrypt() 方法,这个方法返回 Authenticator 的完整 EncryptedData 表示。
更多精彩
赞助商链接