Java客户端和Kerberos/SSO-Krb5LoginModule-不重新使用票证
我正在运行JMeter,它依赖于jdk1.8的Krb5LoginModule 在我看来,Java客户端和Kerberos/SSO-Krb5LoginModule-不重新使用票证,java,authentication,kerberos,jaas,gssapi,Java,Authentication,Kerberos,Jaas,Gssapi,我正在运行JMeter,它依赖于jdk1.8的Krb5LoginModule 在我看来,Krb5LoginModule无法跨多个请求维护kerberos会话。这将导致在每次请求之前进行http401和重新握手 我试图重现一个有严重间歇性性能问题的生产环境,我希望在测试中包括Kerberos/SSO身份验证,但我无法将其设置为像使用REST服务器的Windows客户端一样运行 REST服务器向数百个Excel加载项客户端提供数据,这些客户端被设置为使用Kerberos进行身份验证。在访问日志中,我
Krb5LoginModule
无法跨多个请求维护kerberos会话。这将导致在每次请求之前进行http401
和重新握手
我试图重现一个有严重间歇性性能问题的生产环境,我希望在测试中包括Kerberos/SSO身份验证,但我无法将其设置为像使用REST服务器的Windows客户端一样运行
REST服务器向数百个Excel加载项客户端提供数据,这些客户端被设置为使用Kerberos进行身份验证。在访问日志中,我看到每个客户机最初都会触发HTTP status 401响应,然后是200,在客户机活动期间会再触发200
为了避免混淆,服务器正在处理Kerberos握手,并且没有使用servlet容器会话
当我的测试运行时,我看到每个请求都被来自服务器的401拒绝,Java转到Kerberos KDC获取另一个票证,然后重新提交它。虽然这样做有效,但我的KDC服务器每秒不能处理超过两个请求并超时请求,因此我无法大幅提升负载测试
那么,为什么Krb5LoginModule不能像Excel那样保留从KDC获得的kerberos票据并预验证每个调用呢
这是我为配置所做的尝试:
JMeter {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
ticketCache="FILE:krb.cache"
useKeyTab=true
keyTab="FILE:krb.keytab"
storeKey=true
principal="-tsk-thing-ldap-dev@DO.AD.DUM.COM"
debug=true;
};
我尝试过使用键控标签和不使用键控标签,使用票证缓存和不使用键控标签。我希望我只是做错了配置,但我不知道怎么做
这就是我假设的基础:
及空气污染指数:
文件:
位也不是必需的,比如:
ticketCache=/path/to/your/krb.cache
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
debug=true
doNotPrompt=true
useTicketCache=true
};
和设置以下注册表项(Windows 7)
参考资料:
kinit
工具(与Java发行版或Linux工具捆绑在一起)将票据持久保存到缓存文件中,您还可以重写自己的Krb5LoginManger
以执行此操作(很难)
但是,我认为Adam工作流中有一些问题,在我对GSS的理解中,对于同一会话,服务器和客户端都必须始终引用在初始化期间创建的相同的
GSSContext
对象 “…向数百个Excel加载项客户端提供数据,这些客户端被设置为使用Kerberos进行身份验证…”-如果客户端关闭连接,并且在新请求中客户端不提供授权标头,则会重新开始。客户端需要缓存连接和/或保持连接打开。我有一种不好的感觉,JMeter会在每次请求后关闭连接,这是在linux上的。该注册表设置的等效配置是什么?“允许目标会话密钥”做什么?@gusto2当然,保持连接活动或关闭连接是不相关的,重要的是带有auth票证的头。Krb5LoginModule只在401之后的第一个请求中提供它,然后下次它再次忘记它。我想我可以在JMeter中使用keep alive,但这样我就不会真正复制prod环境。我们使用JMeter进行一些IAM测试,但据我所知,JMeter只是在后续请求中重新发送授权标头:(
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Value Name: allowtgtsessionkey
Value Type: REG_DWORD
Value: 0x01 ( default is 0 )