我正在运行JMeter,这取决于JDK 1.8
' Krb5LoginModule
。
在我看来,Krb5LoginModule
无法跨多个请求维护kerberos会话。这会导致HTTP 401
并在每次请求之前重新进行握手。
我尝试重现具有严重间歇性性能问题的生产环境,我想在我的测试中包含Kerberos / SSO身份验证,但我无法将其设置为像Windows客户端一样运行使用我的REST服务器。
REST服务器向数百个Excel加载项客户端提供数据,这些客户端设置为使用Kerberos进行身份验证。在访问日志中,我看到每个客户端最初触发HTTP状态401响应,然后是200,并且在客户端活动期间再触发200秒。
为了避免混淆,服务器正在使用servlet容器会话处理Kerberos握手并且 NOT 。
当我的测试运行时,我看到服务器上的401拒绝了每个请求,Java转到Kerberos KDC获取另一个票证,然后重新提交。虽然这样做有效,但我的KDC服务器每秒都不能处理多个请求并超出请求,因此我无法大幅提升负载测试。
那么为什么Krb5LoginModule不保留从KDC获得的kerberos票并预先验证每次通话,就像Excel一样?
这是我为配置尝试的内容:
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;
};
我已经尝试过使用keytabs而没有使用票证缓存而没有。我希望我的配置错误,但我无法理解。
的假设答案 0 :(得分:0)
我认为您不需要路径周围的引号,也不需要此FILE:
位,例如:
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)
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Value Name: allowtgtsessionkey
Value Type: REG_DWORD
Value: 0x01 ( default is 0 )
参考文献:
答案 1 :(得分:0)
Jaas不会将票证持久存储到缓存中,它只能获取已保存的票证。 我的问题/答案here
中的更多信息您需要使用kinit
工具(与Java发行版或Linux工具捆绑在一起)才能将票证保存到缓存文件中,您也可以重写自己的Krb5LoginManger
以执行此操作(艰难的方式)。
但是我认为在我对GSS的不足之处亚当工作流程中存在一些问题,因为同一会话(服务器和客户端)必须始终引用它们在初始化期间创建的相同GSSContext
对象。