问题标签 [spring-security-kerberos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
285 浏览

spring - 针对没有跨领域信任的领域测试来自浏览器的 Kerberos 登录

我们正在尝试使用 Kerberos 身份验证构建一个 Spring Web 应用程序。我们的开发机器是公司 AD 域的一部分。我们在 VM 中有一个本地 KDC 来测试 kerberos,但不信任 AD。除了来自 AD 的票证之外,网络身份管理器还能够从该领域获得票证。

从浏览器进行测试时,似乎来自域登录的票证被发送到服务器,而不是测试领域的票证,由于未知的客户端主体而失败并回退到 NTLM。

将运行 tomcat 服务器和测试 KDC 的主机添加到受信任站点,并为受信任站点启用自动身份验证。将其添加到本地 Intranet 也没有什么不同。

是否可以从任何浏览器发送通过“网络身份管理器”获得的领域的适当票证,而不是当前登录的 AD 用户票证?

0 投票
3 回答
80719 浏览

java - GSSException:未提供有效凭据(机制级别:未能找到任何 Kerberos tgt)

我对 MOngoDB + Java 配置非常陌生。我正在尝试从 Java 应用程序实现与远程 mongodb 服务器的连接。我想使用 GSSAPI 机制与 mongotemplate 连接。下面的代码已经成功执行。下面的代码来自我的配置文件。

但是当我尝试执行下面的代码时,我遇到了异常

例外:

GSSException:在 sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory) 的 sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147) 处未提供有效凭据(机制级别:未能找到任何 Kerberos tgt) .java:122) 在 sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.java:193) 在 sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:427) 在 sun.security.jgss.GSSCredentialImpl.(GSSCredentialImpl .java:62) 在 sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java:154) 在 com.mongodb.DBPort$GSSAPIAuthenticator.getGSSCredential(DBPort.java:622) 在 com.mongodb.DBPort$GSSAPIAuthenticator.createSaslClient( DBPort.java:593) 在 com.mongodb.DBPort$SaslAuthenticator.authenticate(DBPort.java:895) 在 com。mongodb.DBPort.authenticate(DBPort.java:432) 在 com.mongodb.DBPort.checkAuth(DBPort.java:443) 在 com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:289) 在 com.mongodb.DBTCPConnector.call (DBTCPConnector.java:269) 在 com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84) 在 com.mongodb.DB.command(DB.java:320) 在 com.mongodb.DB.command(DB.java: 299) 在 com.mongodb.DB.command(DB.java:388) 在 com.mongodb.DBApiLayer.getCollectionNames(DBApiLayer.java:152)320) 在 com.mongodb.DB.command(DB.java:299) 在 com.mongodb.DB.command(DB.java:388) 在 com.mongodb.DBApiLayer.getCollectionNames(DBApiLayer.java:152)320) 在 com.mongodb.DB.command(DB.java:299) 在 com.mongodb.DB.command(DB.java:388) 在 com.mongodb.DBApiLayer.getCollectionNames(DBApiLayer.java:152)

0 投票
2 回答
11689 浏览

java - Spring Security Kerberos + AD,校验和失败

我正在尝试使用 Active Directory 凭据执行 Spring Security Kerberos,如http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/#samples-sec-中所述服务器-win-auth。我想说我已经完成了大部分内容(SPN、keytabs 等)。现在我的校验和失败了。假设我更改了我的主体名称,我会收到一个 AES 加密错误。

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

这是我在运行 jar 时得到的


Debug 为 true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache 为 null isInitiator false KeyTab 为 /home/boss/webdev125-3.keytab refreshKrb5Config 为 false principal 为 http/webdev@EXAMPLE.ORG tryFirstPass 为 false useFirstPass 为 false storePass 为 false clearPass是假的

主体为 http/webdev@EXAMPLE.ORG 将使用 keytab 提交成功

……

2015-11-25 11:29:09.631 调试 555​​9 --- [nio-8080-exec-3] .a.KerberosServiceAuthenticationProvider:尝试验证 Kerberos 令牌 2015-11-25 11:29:10.003 WARN 5559 --- [ nio-8080-exec-3] waSpnegoAuthenticationProcessingFilter:协商标头无效:

...

org.springframework.security.authentication.BadCredentialsException:在 org.springframework.security.kerberos.authentication.KerberosServiceAuthenticationProvider 的 org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator.validateTicket(SunJaasKerberosTicketValidator.java:71) 处的 Kerberos 验证不成功。在 org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 进行身份验证(KerberosServiceAuthenticationProvider.java:64)

...

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

原因:sun.security.krb5.KrbCryptoException:校验和失败

引起:java.security.GeneralSecurityException:校验和失败


其他一些细节:

  • /etc/krb5.conf 确实有 default_tgs_enctypes,default_tkt_enctypes 包括 aes256-cts-hmac-sha1-96
  • 默认 keytab 位置在应用程序和 krb5.conf 之间匹配
  • 在 Windows 服务器上生成密钥表,然后复制到 RHEL
0 投票
2 回答
4167 浏览

java - Spring Security Kerberos,Kerberos + AD - 错误:访问被拒绝,没有要存储的密钥

这是来自https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-win-auth的 Kerberos 示例应用程序,对应于http:// /docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/#samples-sec-server-win-auth

我所做的只是修改 src/main/resources/application.yml 以适应我的系统,并在创建 SPN 和 Keytab 文件之间来回切换。我的春季申请似乎开始正常。下面是通过控制台输出的 Kerberos 配置。

Debug 为 true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache 为 null isInitiator false KeyTab 为 /etc/client-server.keytab refreshKrb5Config 为 false principal 为 HTTP/client-server.example.org@REALM tryFirstPass 为 false useFirstPass 为 false storePass 为false clearPass 为 false
主体为 HTTP/client-server.example.org@REALM
将使用 keytab
提交成功

所以我可以看到客户端应用程序已经接受了我的设置。然后我尝试在另一台机器上通过 chrome 访问 client-server:8080/hello。我得到的第一个错误是拒绝访问(用户是匿名的)。应该重定向到身份验证入口点。然后我得到以下内容,以“No key to store”结尾</p>

[nio-8080-exec-4] waSpnegoAuthenticationProcessingFilter:收到请求客户端服务器的协商标头:8080/favicon.ico:协商 YIIHZAYGKwYBBQUCoIIHWDCCB1SgMDAuBgk……./9AdsoFH2ya7C
[nio-8080-exec-4] ossauthentication.ProviderManager:使用 org 进行身份验证尝试.springframework.security.kerberos.authentication.KerberosServiceAuthenticationProvider
[nio-8080-exec-4] .a.KerberosServiceAuthenticationProvider :尝试验证 Kerberos 令牌
[nio-8080-exec-4] .a.KerberosServiceAuthenticationProvider :成功验证 myUsername@REALM
[nio-8080-exec-4] osslsFilterBasedLdapUserSearch : 搜索用户 'myUsername@REALM',使用用户搜索 [ searchFilter: '', searchBase: 'DC=xxxxx', scope: subtree, searchTimeLimit: 0, derefLinkFlag: false ]
调试是 true storeKey true useTicketCache true useKeyTab true doNotPrompt true ticketCache 是 null isInitiator true KeyTab 是 null refreshKrb5Config 是 false principal 是 HTTP/client-server.example.org@REALM tryFirstPass 是 false useFirstPass 是 false storePass 是 false clearPass 是 false
从缓存中获取 TGT
主体是 HTTP/client-server.example.org@REALM
2015-11-27 11:38:47.906 调试 3183 --- [nio-8080-exec-4] wcHttpSessionSecurityContextRepository:SecurityContext 为空或内容是匿名的 - 上下文不会存储在 HttpSession 中。2015-11-27 11:38:47.906 DEBUG 3183 --- [nio-8080-exec-4] sswcSecurityContextPersistenceFilter:SecurityContextHolder 现在已清除,因为请求处理已完成 2015-11-27 11:38:47.912 错误 3183 --- [ nio-8080-exec-4] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() for servlet [dispatcherServlet] 在路径 [] 的上下文中抛出异常 org.springframework.ldap.AuthenticationException: No key to店铺; 嵌套异常是 javax.naming.AuthenticationException:没有要存储的密钥 [根异常是 javax.security.auth.login.LoginException:没有要存储的密钥]

现在看来该应用程序能够验证我的用户,但我不知道它是否能找到我的用户信息。在 cr.openjdk.java.net/~weijun/7201053/webrev.00/raw_files/new/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java 查看 Krb5LoginModule.java 的源代码,你可以通过简单的搜索找到登录异常,没有密钥存储。代码说我的 ktab(我猜是 keytab)为空。奇怪的是,控制台输出确实表明,当我尝试使用浏览器导航时,keytab 为空,即使它不是在我启动应用程序时。

当我有用户尝试访问我的应用程序时,有谁知道为什么我的 keytab 会变为空?还是我的应用程序或系统配置有其他问题?

0 投票
1 回答
528 浏览

internet-explorer - ADFS2.0 与 kerberos 配置

我正在使用带有 kerberos 的 ADFS 2.0 实现 windows 集成身份验证

我已经完成了
在某些 xyz.com 域上运行的 Windows Server ADDS、ADFS2.0、DNS 的必备配置

我有一个 Windows 客户端连接到 Windows 服务器 xyz.com 域

和 Linux env 上的 Spring-security-saml2-sampl 应用程序

所有这个域都使用 VLAN 连接。

为了启用 windows 身份验证,我配置了 IE 设置启用 windows 集成身份验证,添加本地 Intranet 配置

必需的。我参考了这个链接: http ://www.cisco.com/c/en/us/support/docs/security-vpn/kerberos/118841-configure-kerberos-00.html

根据我配置的 Windows 服务器上的 kerberos 配置

在我的 Windows 客户端应用程序中,我可以看到我得到了 kerberos 票证:运行时

但是对于 spring-security-saml2-sample 应用程序,我无法进行身份验证

一次又一次地得到Windows提示。并且失败了

我需要为使用 kerberos 启用 ADFS 进行配置,

谢谢

0 投票
2 回答
5174 浏览

java - SrcName 为空的 GSSContext

我正在使用基于 Windows 域登录的 SSO 的 Web 应用程序,为此我选择验证 Kerberos 票证。但现在我面临一个我找不到解决方案的问题。我设法无例外地验证票证,但是当我尝试获取用户名时,NullPointerException会抛出,因为用户名是null并且我不知道问题出在哪里。

如果我在验证期间没有收到任何异常,为什么用户名为空?

我如何获得用户名: String clientName = gssContext.getSrcName().toString();

我基于此创建我的客户:

使用 GSSManager 验证 Kerberos 票证

如何通过 GSS-API 获取 kerberos 服务票据?

http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/single-signon.html

更新1:

我如何设置内容,只需在此处复制粘贴表单https://stackoverflow.com/a/25450862/1646082

更新 2:

如果我基于此https://spring.io/blog/2009/09/28/spring-security-kerberos-spnego-extension设置弹簧安全性,我也会遇到同样的错误:

java.lang.NullPointerException at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:136) at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:12 ) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422)

更新 3:

还尝试按照此处的建议将 Java 版本从 1.8 更改为 1.7使用 Kerberos 进行域身份验证失败。没有结果。

更新 4:

首先。不要使用 Java 1.8 b40 和 b45,它们都坏了。并且不要在本地PC上测试它,它不起作用(我不知道为什么)。

在更改最新(b65)Java 版本后,我得到了关于加密的异常(找不到适当类型的密钥来解密 AP REP - AES256 ...)。我已经通过 Java 1.8 的 Java Cryptography Extension (JCE) 修复了这个问题,并重新创建了 keytab,/crypto AES256-SHA1毕竟我遇到了异常:

GSSException:在 sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source) 在 sun.security.jgss.krb5.Krb5Context.acceptSecContext(Unknown Source) 的 GSS-API 级别未指定故障(机制级别:校验和失败) .jgss.GSSContextImpl.acceptSecContext(Unknown Source) at GssServer$GssServerAction.run(GssServer.java:159) ... 4 更多原因:KrbException: Checksum failed at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(未知来源)在 sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(未知来源)在 sun.security.krb5.EncryptedData.decrypt(未知来源)在 sun.security.krb5.KrbApReq.authenticate(未知来源)在sun.security.krb5.KrbApReq.(Unknown Source) at sun.security.jgss.krb5.InitSecContextToken.(Unknown Source) ... 8 更多原因:java.security。GeneralSecurityException: 校验和在 sun.security.krb5.internal.crypto.dk.ArcFourCrypto.decrypt(Unknown Source) at sun.security.krb5.internal.crypto.ArcFourHmac.decrypt(Unknown Source) 处失败 ... 14 更多

我尝试了本教程和其他方法来创建 keytabfile,但我仍然没有解决方案。

0 投票
2 回答
6250 浏览

security - Spring Security Kerberos windows 身份验证中的错误

我正在尝试在我们的环境中设置基于 Spring 的安全 Web 应用程序。如 http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/#setupwinkerberos中所述

为了确认一切设置正确,我正在尝试运行 Spring Boot Security 示例应用程序(按照此处所述构建:http: //docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference /htmlsingle/#samples-sec-server-win-auth )

这是我们在 TEST 域下的测试环境:

Active Directory(称为 AD 服务器)域控制器,Windows 2008 R2 64 位
计算机名称:adjavatest1
完整计算机名称:adjavatest1.test.company.info
用户:TEST\administrator

客户端 PC,Windows 7
计算机名称:adjavatest2
完整计算机名称: adjavatest2.test.company.info
用户:TEST\administrator

应用服务器(简称Web Server)
计算机名:kpiq-dev
计算机全名:kpiq-dev.test.company.info
用户:TEST\administrator

到目前为止,我已经做了以下步骤来配置环境和应用程序

1)在AD服务器上设置SPN

(许多消息来源建议创建 SPN“HTTP/adjavatest1”和“HOST/adjavatest1”——我已经尝试过了,没有任何区别。)

2) 在 AD 服务器上验证 SPN

3) 在 AD Server 上映射用户/服务并生成 keytab 文件

4) 将 keytab 文件复制到 C;\SpringSSO 目录中的 Web 服务器


5)使用来自 MIT kerberos 工具 c:\SpringSSO>kinit -V -k -t adjavatest1.HTTP.keytab HTTP/adjavatest1.test.company.info@TEST.COMPANY.INFO 的 kinit验证 Web 服务器上的 keytab使用现有缓存:初始默认 ccache 使用主体:HTTP/adjavatest1.test.company.info@TEST.COMPANY.INFO 使用 keytab:adjavatest1.HTTP.keytab 已通过来自 jdk c:\SpringSSO>kinit -k -t adjavatest1.HTTP 的 kinit 验证到 Kerberos v5。 keytab HTTP/adjavatest1.test.company.info@TEST.COMPANY.INFO 新票据存储在缓存文件 C:\Users\administrator.TEST\krb5cc_administrator

6) 在两个位置的 Web 服务器上的 jre/lib/security 中安装“Kerberos 和无限强度策略”:

7) 检查 Web 服务器上的 windows 注册表:

8) 构建从https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples获取的 spring-security-kerberos-samples\sec-server-win-auth 应用程序 使用 application.yml 中的配置属性

9) 将Spring boot应用部署到C:\SpringSSO目录下的Web Server

10) 在 Web 服务器 c:\SpringSSO>java -Dsun.security.krb5.debug=true -Djava.security.krb5.conf=.\krb5.conf -jar sec-server-win-auth-1.0 上启动 Web 应用程序。 2.BUILD-SNAPSHOT.jar

krb5.conf 中的 Kerberos 配置(我尝试了不同的 enctype,“arcfour-hmac-md5”只是最后一次实验)

11)在客户端的IE浏览器中添加路径*.test.company.info到IE浏览器作为内网模式点浏览器到http://kpiq-dev.test.company.info/hello

12) 将浏览器指向 http://kpiq-dev.test.company.info/hello

13)查看Web Server上的日志,表明服务器无法编码

为什么安全尝试加密 Aes256CtsHmacSha1EType,而不是 rc4-hmac?
有什么建议我可以尝试下一步吗?

先感谢您。

0 投票
3 回答
804 浏览

spring-security - 是否可以将两个不同的 AuthenticationProvider 与 WebSecurityConfigurerAdapter 一起使用?

我有一个基于 SpringBoot 的应用程序,具有多个端点。由于将访问端点的不同客户端,我希望有不同的身份验证提供程序来保护它们。某些端点将受 Kerberos 保护(KerberosServiceAuthenticationProvider -- http://docs.spring.io/autorepo/docs/spring-security-kerberos/1.0.0.RC1/reference/htmlsingle/)。某些端点将受 AD/LDAP (ActiveDirectoryLdapAuthenticationProvider) 保护。

我目前使用 Kerberos 或 LDAP,但不能同时使用:

无论如何让这对双方都有效?我正在考虑制作一个可以处理请求的自定义身份验证提供程序,但不确定这是否可行。

0 投票
1 回答
1793 浏览

spring - 为 spring-security-kerberos-client 生成 MS AD keytab

我尝试测试我的 in-ms-domain 应用程序。应用服务器已成功部署。kerberos 和用户名/密码,身份验证都很好。

但是当我使用由“ktpass”客户端密钥表生成的“KerberosRestTemplate”添加“测试”(它是控制器的原因)时,“SunJaasKerberosTicketValidator”抛出异常:

' java.security.PrivilegedActionException:GSSException:在 GSS-API 级别未指定失败(机制级别:指定的密钥版本不可用(44)) '。

我建议的原因是 ktpass 生成的 keytab 文件被破坏了。这就是我生成它的方式:

"C:> ktpass /princ deniz@TESTAD.LOCAL /pass Qw1er2ty3 /ptype KRB5_NT_PRINCIPAL /out deniz.keytab

以防万一我在我的 github 上保存了示例:https ://github.com/mezlogo/kerberos_sample

我认为 keytab 我的 keytab 坏了,但找不到如何生成它以供客户端使用(没有 HTTP/username@DOMAIN)。

PS对不起我的英语。

0 投票
1 回答
1872 浏览

spring-security - 如何将缓存票证与 KerberosRestTemplate 一起使用?

我想为我的 spring security kerberos 身份验证实现集成测试。为此目的,有KerberosRestTemplate参考)。KerberosRestTemplate有一个默认构造函数,其描述为“如果您想使用缓存票证,请将 keyTabLocation 和 userPrincipal 留空”。

为了研究,我写了一个微不足道的课程:

当我运行它时,抛出了异常:

我的klist包含正确的缓存票,用于我的服务。

我的浏览器(firefox)已成功通过 kerberos sso 进行身份验证。

我使用 Windows server 2012。和 Windows 7 作为客户端。

如何使用缓存票?(并且 ktpass 可以生成客户端 keytab 吗?)

PS对不起我的英语。