首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring安全Kerberos + AD,校验和失败

Spring安全Kerberos + AD,校验和失败
EN

Stack Overflow用户
提问于 2015-11-25 22:13:02
回答 2查看 13.2K关注 0票数 5

我正在尝试使用Active凭据执行Security,如http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/#samples-sec-server-win-auth中所述。我想说的是,我已经有了大部分的东西(SPN,键标签等)。现在我有一个校验和失败。如果我更改了我的主要名称,我会得到一个AES加密错误。

我在RHEL 6上使用Spring与来自https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-win-auth的OracleJava1.8+ JCE示例

这是我在运行罐子时得到的

调试为真,storeKey真useTicketCache假useKeyTab真ticketCache真ticketCache为空isInitiator假KeyTab is /home/boss/webdev125-3密钥标签refreshKrb5Config是假主体是http/webdev@EXAMPLE.ORG tryFirstPass是false useFirstPass是false storePass是false clearPass是假的。 主体是http/webdev@EXAMPLE.ORG将使用keytab提交成功

……

2015年11-25 11:29:09.631调试5559 -- nio-8080-exec-3 .a.KerberosServiceAuthenticationProvider :尝试验证Kerberos令牌2015 11-25 11:29:10.003警告5559 -- nio-8080-exec-3 w.a.SpnegoAuthenticationProcessingFilter :协商标头无效:

..。

org.springframework.security.authentication.BadCredentialsException: Kerberos验证在org.springframework.security.kerberos.authentication.KerberosServiceAuthenticationProvider.authenticate(KerberosServiceAuthenticationProvider.java:64) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)的org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator.validateTicket(SunJaasKerberosTicketValidator.java:71)上不成功

..。

原因: org.ietf.jgss.GSSException: GSS级别未指定的失败(机制级别:校验和失败)

代码语言:javascript
复制
    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 org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:170)
    at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:153)
    ... 48 common frames omitted

引发: sun.security.krb5.KrbCryptoException:校验和失败

代码语言:javascript
复制
    at sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType.decrypt(Aes256CtsHmacSha1EType.java:102)
    at sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType.decrypt(Aes256CtsHmacSha1EType.java:94)
    at sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:175)
    at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:281)
    at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:149)
    at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:108)
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:829)
    ... 56 common frames omitted

原因: java.security.GeneralSecurityException:校验和失败

代码语言:javascript
复制
    at sun.security.krb5.internal.crypto.dk.AesDkCrypto.decryptCTS(AesDkCrypto.java:451)
    at sun.security.krb5.internal.crypto.dk.AesDkCrypto.decrypt(AesDkCrypto.java:272)
    at sun.security.krb5.internal.crypto.Aes256.decrypt(Aes256.java:76)
    at sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType.decrypt(Aes256CtsHmacSha1EType.java:100)
    ... 62 common frames omitted

其他一些细节:

  • /etc/krb5.cts有default_tgs_enctypes,default_tkt_enctypes,包含have 256-cts SHA1-96
  • 默认的keytab位置是应用程序和krb5.conf之间的匹配
  • 键标签在windows服务器上生成,然后复制到RHEL中。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-27 20:29:22

我似乎与现有的服务主映射有冲突。一旦我清理了它,错误就停止发生了。这个链接帮助我找到了解决方案-- sscc=t

票数 6
EN

Stack Overflow用户

发布于 2020-04-02 07:44:53

我最近碰到了这个问题。

服务的DNS必须与服务主体名称匹配。主体名称必须以HTTP/开头。

示例:服务DNS: www.ala-bala.com主要名称必须是:HTTP/Ala-bala.com@王国

这个领域不需要匹配DNS。

如果在本地运行,DNS显然将与主体不匹配。

您可以在/etc/host中添加一行: 127.0.0.1 ala-bala.com。

您还可以使用客户机来覆盖kerberos主机/主体名称,比如Python中的requests_kerberos。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33927316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档