Java 制作自己的Kerberos身份验证票据

Java 制作自己的Kerberos身份验证票据,java,authentication,hadoop,http-headers,kerberos,Java,Authentication,Hadoop,Http Headers,Kerberos,我使用的是Java类org.apache.hadoop.security。 来自Apache的authentication.server.AuthenticationFilter Hadoop2.5.0作为Tomcat6 Servlet前面的过滤器 希望将Kerberos身份验证添加到 我正试图针对这个过滤器编写一些测试用例 让我们更好地了解它是如何 工作和它的作用 为了让筛选器对用户进行身份验证,它正在读取 HTTP请求的“授权”标头, 期望值包含“协商” 我对Kerberos工作原理的理解使

我使用的是Java类org.apache.hadoop.security。 来自Apache的authentication.server.AuthenticationFilter Hadoop2.5.0作为Tomcat6 Servlet前面的过滤器 希望将Kerberos身份验证添加到

我正试图针对这个过滤器编写一些测试用例 让我们更好地了解它是如何 工作和它的作用

为了让筛选器对用户进行身份验证,它正在读取 HTTP请求的“授权”标头, 期望值包含“协商”

我对Kerberos工作原理的理解使我相信 应该能够在创建我的 类似以下内容的HTTP请求:

// normally the server principal keytab is not available from the client side,
// but for the purpose of making test cases I see no problem with sharing the keytab
// between the client side and the server side
javax.security.auth.kerberos.Keytab kt = KeyTab.getInstance("keytab");
KerberosKey keys[] = kt.getKeys("HTTP/voltage-pp-0000.albert.int@ALBERTS.INT");
SomeTokenType token = new SomeTokenType();
<code to set token parameters>

// my understanding of Kerberos is that the only cyphertext key 
// needed on this token
// is one of the server principal's keys from the Keytab file 
// (which does contain ~5 
// keys of different sizes and types, I've checked)
EncryptedTokenType etoken = <encrypt token with a key from keys> 
byte[] array = etoken.getBytes();

httprequest.addHeader("Authorization","Negotiate " + new Base64(0).encode(array));
//通常情况下,客户端无法使用服务器主体密钥表,
//但是为了制作测试用例,我认为共享keytab没有问题
//在客户端和服务器端之间
javax.security.auth.kerberos.Keytab kt=Keytab.getInstance(“Keytab”);
KerberosKey keys[]=kt.getKeys(“HTTP/voltage-pp-0000.albert。int@ALBERTS.INT");
SomeTokenType token=新的SomeTokenType();
<设置令牌参数的代码>
//我对Kerberos的理解是唯一的cyphertext密钥
//需要这个令牌
//是密钥表文件中服务器主体的密钥之一
//(其中包含~5
//不同尺寸和类型的钥匙,我已经检查过了)
EncryptedTokenType etoken=
字节[]数组=etoken.getBytes();
httprequest.addHeader(“授权”、“协商”+新Base64(0).encode(数组));
因此,这里的问题是:

  • 体现已发送Kerberos身份验证令牌的Java类是什么 在“授权谈判”中
  • 身份验证令牌的哪些字段必须设置为哪些值
  • 用于加密身份验证令牌的加密算法是什么 用键盘键
  • 什么是最好的keytab键
  • 一次对身份验证令牌进行字节序列化的机制是什么 加密的

  • 你是对的,用这种方式“伪造”一张票是可能的。然而,据我所知,没有标准的kerberos API可以做到这一点

    您基本上需要对整个kerberos协议进行反向工程,以 基于keytab创建服务票证。服务票格式为 记录在这里

    您可以使用keytab中的任意键来加密服务票证。一旦 如果您有服务票证,则需要实现此RFC以创建 协商标题

    一般来说,为客户机主体获取一个keytab并使用它和kinit获取用于测试的服务票证要简单得多。你的方法可以奏效 可能有黑客代码在某处实现它,但它是
    在kerberos环境中进行测试的一种非常非标准的方法

    您是对的,您可以通过这种方式“伪造”票证。然而,据我所知,没有标准的kerberos API可以做到这一点

    您基本上需要对整个kerberos协议进行反向工程,以 基于keytab创建服务票证。服务票格式为 记录在这里

    您可以使用keytab中的任意键来加密服务票证。一旦 如果您有服务票证,则需要实现此RFC以创建 协商标题

    一般来说,为客户机主体获取一个keytab并使用它和kinit获取用于测试的服务票证要简单得多。你的方法可以奏效 可能有黑客代码在某处实现它,但它是 在kerberos环境中进行测试的一种非常非标准的方法