小编Gau*_*tam的帖子

Kerberos票证验证功能测试

我已经编写了一些代码来验证服务器上客户的kerberos票证。我还为班级编写了单元测试。通过模拟对GSS库类的调用来编写单元测试。尽管由于模拟了实际的GSS调用,但这并没有给我足够的信心。

从到目前为止的研究中,我已经收集到,为了验证客户端的令牌,我需要使用与KDC共享的密钥对它进行解密,该密钥可以从keytab文件中获得。因此,为了执行验证,我需要做两件事(需要纠正的立场):

  1. 客户的代币
  2. 服务器上的Keytab文件

现在,如果我在类路径中有这些文件,是否可以在没有任何模拟调用的情况下对令牌进行实际验证?这样做有技术上的挑战吗?如果是的话,那是什么?

更新1:

看来我还需要设置一些系统属性,以便GSS库选择正确的领域,kdc等。因此,本质上我们需要三件事:

  1. 一张非洲球票
  2. 密钥表文件
  3. 与keytab文件和票证相对应的系统属性。

这样,我似乎可以通过验证进行端到端的测试工作,但只能进行5分钟。:)

情况是,如果我捡起由KDC新鲜生成的kerberos令牌并将其放入测试中,则测试可以成功运行,但5分钟后会开始失败,但“时钟偏斜太大”除外。我更改了KDC上的kerberos策略,以生成永不过期的凭单,但错误仍然存​​在。这里的一线希望是,现在我有了一种方法可行的概念证明。

问题归结为克服了“时钟偏斜太大”错误。

更新2:

可以通过在krb.conf文件中指定时钟偏斜值来进行修改。那是我需要设置的另一个系统属性。现在,测试可以端到端进行了。现在写一个答案。


时钟偏斜错误的堆栈跟踪:

Caused by: java.security.PrivilegedActionException: GSSException: Failure unspecified at GSS-API level (Mechanism level: Clock skew too great (37))
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at com.example.vidm.eks.request.KerberosTokenValidator.getPrincipalUserName(KerberosTokenValidator.java:91)
    at com.example.vidm.eks.request.KerberosTokenValidator.lambda$validateToken$0(KerberosTokenValidator.java:80)
    ... 7 more
Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Clock skew too great (37))
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:856)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
    at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:906)
    at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:556)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
    at com.example.vidm.eks.krb.KerberosValidateAction.run(KerberosValidateAction.java:47)
    at com.example.vidm.eks.krb.KerberosValidateAction.run(KerberosValidateAction.java:22)
    ... 11 more …
Run Code Online (Sandbox Code Playgroud)

java kerberos gssapi

5
推荐指数
1
解决办法
285
查看次数

在加特林场景之外进行 Http 调用

我的用例是进行 http 调用,从响应中的 Location 标头获取重定向 url,并使用此 url 执行负载测试。该 url 是动态生成的,因此是最初的第一个 http 调用。请注意,测试第一个 http 调用不是我的测试的一部分。实现这一目标的最佳方法是什么?加特林中是否有类似于 @BeforeMethod 的等效项?加特林本身可以用来进行独立的http调用还是我需要使用基本的scala来实现这一点?到目前为止我有这个:

val httpConfig = http
  .inferHtmlResources()
  .acceptHeader("*/*")
  .acceptEncodingHeader("gzip, deflate")
  .acceptLanguageHeader("en-US,en;q=0.5")
  .header("Authorization", "Negotiate " + token)
  .doNotTrackHeader("1")
  .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0")

val scn = scenario("My Tests").exec(http("Health check")
  .get("https://example-server.com")
  .check(status.is(200)))

setUp(
  scn.inject(atOnceUsers(10))
).protocols(httpConfig)
Run Code Online (Sandbox Code Playgroud)

我对加特林和scala的理解是有限的。因此就有了这个基本问题。

scala load-testing gatling

4
推荐指数
1
解决办法
3176
查看次数

标签 统计

gatling ×1

gssapi ×1

java ×1

kerberos ×1

load-testing ×1

scala ×1