问题标签 [jgss]
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.
spnego - 关于使用 SPNEGO Tomcat 7 配置 SSO 的 java.security.PrivilegedActionException
我试图让 SSO 使用 SPNEGO for Tomcat 7 和 IBM JDK。我们正在使用“org.apache.catalina.authenticator.SpnegoAuthenticator”进行身份验证,它调用 com.sun.security.jgss.krb5.accept。它的配置是
我尝试使用 Java 6 (SR9)、7 (SR1,SR5),但我总是陷入以下错误。
任何人都可以指出我错过的任何事情吗?
-谢谢
java - JGSS GSSName.NT_HOSTBASED_SERVICE 不适用于 kerberos 服务密钥表
我正在本地域上测试 JGSS 示例,但基于主机的服务存在问题。下面是设置:
获取从命令生成的密钥表
ktpass -princ myservice/host.my.example.com@MY.EXAMPLE.COM -mapuser krbsrv@my.example.com -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCILAL -pass krbpass -out myservice-host.keytab
系统管理员运行
setspn -S myservice/host.my.example.com krbsrv
以设置活动目录的 SPN。从 GssClient.java 通过以下方式创建 serverprincipal:
这将导致
java.security.PrivilegedActionException: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7))
异常。但如果我打电话
createName()
就GSSName.NT_USER_NAME
不会出错。我已经询问了系统管理员并验证了
setspn -L krbsrv
和没有重复setspln-X myservice/host.my.example.com
。
那么我有什么事情搞砸了吗?服务器在 Solaris 上运行,客户端在 Windows 上运行,两者都在 Java 6u27 上。
非常感谢您的建议。
java - 如何使用 java GSS+JAAS 获取可更新的 kerberos 票证
我正在使用 jTDS 连接到 SQLServer。jTDS 在内部使用 GSS 获取 kerberos 的服务票证并建立安全上下文。由于我的应用程序寿命很长,并且我的连接在整个过程中保持活动状态,因此我需要更新 kerberos 的服务票证,以允许 SQL 服务器自行更新它们(kdc 策略设置为在 12 小时后过期所有票证)。
jTDS 为获取 kerberos 令牌所做的(或多或少)如下:
我怀疑我得到的票是不可更新的。我正在通过执行以下操作来检查:
在我们的特定配置中,GSS 正在从 JAAS 登录模块获取 kerberos TGT。我们将以下变量设置为 false -Djavax.security.auth.useSubjectCredsOnly=false
,并且在 login.cfg 文件中我们配置了以下登录模块:
我注意到的另一件事是该getLifetime()
方法GSSContext
似乎不起作用。无论票证的实际生命周期是多少,它总是返回 2147483647(最大整数)。
我对分支 jTDS 驱动程序感到满意,因此如果需要,我可以修改它建立 GSS 上下文的方式。
我尝试了什么:
使用 GSS api 的本机实现:
这在获取可更新票证方面对我来说很好,但它带来了另一组问题(在确保正确设置票证缓存并且其中的票证正确更新方面)。如果我可以绕过这个选项,那就太好了。我在这里观察到的事情是,该getLifetime()
方法实际上以票证的秒数返回了真实的生命周期。
重新实现 KerberosLoginModule:
基于对这个问题的回答Jaas - Requesting Renewable Kerberos Tickets我重新实现了 LoginModule 以在请求 TGT 之前设置KDCOption
RENEW KrbAsReqBuilder
。从我获得可更新 TGT 的意义上说,这很好用,但 GSS 从该 TGT 获得的票仍然不可更新。如果我在 KDCOption 对象的构造函数中设置断点并在每个请求上手动设置 RENEW 标志(即使KrbTgsReq
是由 GSS 完成的)它也可以工作,但要使该更改富有成效需要对 GSS 进行重大重写,我对此感到不舒服。
java - 将 Sasl.createSaslClient 与 kerberos 一起使用时,是否可以修改 kerberose 配置选项?
我想为票证缓存使用非默认位置。可以设置这个值吗?我检查了Krb5LoginModule,它允许这样的配置,但我找不到任何与 Sasl 客户端相关的东西。
任何有关这方面的帮助将不胜感激。
java - Kerberos 和 LDAP:为什么 Java 6 在使用 Kerberos 时会截断 LDAP 主机名?
我的任务是通过 Java GSS API 连接到 Kerberized LDAP 服务器。我有一个小型示例应用程序,用于测试我的连接、我的 Kerberos 配置、连接参数等,以确保我可以连接到 LDAP 服务器并检索数据。代码如下:
在 testkerberized.properties 文件中,“ldapHost”属性定义为“ldap://dv2k8ad.2k8.hlp.net:389/dc=2k8,dc=hlp,dc=net”。
现在,当我使用 Java 7 运行这个应用程序时,它就像一个魅力。Kerberos 身份验证成功,并成功从 LDAP 服务器检索数据。但是,我无法让它与 Java 6 一起运行。它不断给我以下异常:
值得注意的是,module.commit() 成功了,并且成功获取了主题,所以没有问题。但我注意到 KrbError 消息中的 sname 字段已关闭。它说 ldap/2k8.hlp.net,而它应该是 ldap/dv2k8ad.2k8.hlp.net。
在此之后,我运行了一个 Wireshark 会话来捕获所有正在发送的 Kerberos 数据包,并在 Java 6 和 Java 7 上运行 TestKerberizedLdap 时捕获了数据包。成功获取了 TGT,因为程序在这两种情况下都获得了成功的 AS-REP . 但是,发送到 KDC 的 TGS-REQ 具有不同的值。Java 6 发送的服务器名称是 ldap/2k8.hlp.net,Java 7 发送的服务器名称是 ldap/dv2k8ad.2k8.hlp.net
我不知道为什么 Java 6 选择修剪 LDAP 主机名。如果有人知道解决方法或修复方法(没有更新 Java),我将非常感谢您的帮助。
java - Java GSS/JDBC 问题
我有一个我正在尝试解决的不寻常问题。我在 Mac 上开发。我正在编写一些使用 jdbc 连接到数据库的代码。我没有直接访问数据库服务器的权限——要访问它,我必须在 ssh 上设置端口转发,该端口转发到数据库服务器所在网络中的代理服务器。我代理的服务器是 Linux 服务器,db 是 Windows 上的 MS Sql Server。设置端口转发后,我可以使用 SquirrelSQL 之类的数据库浏览工具连接到数据库。当我尝试使用我编写的 jdbc 代码,使用完全相同的 JDBC 驱动程序连接到数据库时,我得到了这个:
对 Google 的研究表明这可能是一个 Kerberos 问题,我以前没有处理过这个问题,但我不确定这是否正确。我需要在应用程序中复制的 db 浏览器在做什么?
TIA,亚历克斯
java - Kerberos 错误:GSSHeader 未找到正确的标记
我正在尝试将 Kerberos 身份验证连接到 SOAP 服务 wsdl url。我能够成功建立连接并进行服务调用。启动服务器后,我至少可以进行一次成功的服务调用。然而,在几次请求(1 个或更多)之后,我突然收到无效令牌错误。一旦我收到错误,以后的调用将不起作用并且错误仍然存在。
如果我重新启动服务器,那么服务调用至少会再次运行一次。以上循环继续。
我无法弄清楚为什么令牌突然变得无效,尽管它之前工作过。并且重新启动服务器使令牌再次有效。
这是错误堆栈跟踪:
kerberos - MIT Kerberos 工具使 JAAS 能够访问 Windows LSA?如何在没有工具的情况下做到这一点
使用 JAAS 运行 Java 应用程序我得到了一个令人惊讶的效果:
Java 客户端应用程序无法访问 Windows LSA,直到我安装了 MIT Kerberos 工具“kfw-4.0.1-i386.msi”?
JAAS conf 文件设置:
在 Windows 7 上运行 Java 1.8
我使用 -Dsun.security.krb5.debug=true 获得了日志记录
没有安装 MIT 工具就离开了,安装了 MIT 工具就失败
了,成功了
我尝试将注册表项
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
值名称:allowtgtsessionkey设置为 0 和 1,但是在卸载 MIT 工具时这并没有改变任何内容。
有人可以告诉我是否可以在不安装 MIT 工具的情况下访问 LSA?或者向我指出 JAAS 如何与 Windows LSA 交互的信息?
java - SrcName 为空的 GSSContext
我正在使用基于 Windows 域登录的 SSO 的 Web 应用程序,为此我选择验证 Kerberos 票证。但现在我面临一个我找不到解决方案的问题。我设法无例外地验证票证,但是当我尝试获取用户名时,NullPointerException
会抛出,因为用户名是null
并且我不知道问题出在哪里。
如果我在验证期间没有收到任何异常,为什么用户名为空?
我如何获得用户名:
String clientName = gssContext.getSrcName().toString();
我基于此创建我的客户:
如何通过 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,但我仍然没有解决方案。
tomcat7 - Spnego Kerberos 身份验证为 Windows 7 用户提供“请求是重播 (34)”错误
我已经在我的 Tomcat 7 webapp 上设置了 Spnego 身份验证。它适用于 Ubuntu 14.04 和 Windows 10 用户。但是,所有使用 Chrome/Firefox/IE 的用户都会收到以下错误:
GSSException: Failure unspecified at GSS-API level (Mechanism level: Request is a replay (34))
我无法确定造成这种情况的根本原因。我该如何调试这个问题,因为它是特定于 Windows 7 用户的?