标签: jgss

Java 6中对Windows原生GSS-API的Windows支持

来自http://java.sun.com/developer/technicalArticles/J2SE/security/#3:

注意:当应用程序在尚不支持此功能的操作系统上运行时,将忽略这两个系统属性,例如MS Windows.

那份文件是从2006年开始的,所以事情本来可以改变,但我还没有找到明确的答案.

我想知道最新版本的Sun Java 6 for Windows今天是否支持原生GSS(在没有修改注册表的情况下获取TGT).

java kerberos jgss

11
推荐指数
1
解决办法
1809
查看次数

Kerberos错误:GSSHeader找不到正确的标记

我正在尝试将Kerberos身份验证连接到SOAP服务wsdl url.我能够成功建立连接并进行服务呼叫.启动服务器后,我能够至少进行一次成功的服务呼叫.但是在几次请求(1或更多)之后,我突然得到无效的令牌错误.一旦我收到错误,未来的呼叫就不起作用,错误仍然存​​在.

如果我重新启动服务器,那么服务调用至少会运行一次.以上循环继续.

我无法弄清楚为什么突然令牌失效,尽管它早先工作了.并重新启动服务器使令牌再次有效.

这是错误堆栈跟踪:

Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
        at sun.security.jgss.GSSHeader.<init>(GSSHeader.java:97)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:237)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
Run Code Online (Sandbox Code Playgroud)

java soap kerberos jgss spring-security-kerberos

10
推荐指数
1
解决办法
5411
查看次数

具有null SrcName的GSSContext

我正在使用基于Windows域登录的SSO进行Web应用,为此我选择验证Kerberos票证.但是现在我遇到了一个我无法找到解决方案的问题.我设法验证一个没有例外的票证,但当我试图获取userName时,NullPointerException抛出,因为用户名是null,我不知道哪里有问题.

如果在验证期间没有出现任何异常,为什么用户名为null?

我如何获得userName: 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:

我如何设置内容,只需复制粘贴表格/sf/answers/1781560371/:

final Oid spnegoOid = new Oid("1.3.6.1.5.5.2");

GSSManager gssmgr = GSSManager.getInstance();

// tell the GSSManager the Kerberos name of the service
GSSName serviceName = gssmgr.createName(this.servicePrincipal, GSSName.NT_USER_NAME);

// get the service's credentials. note that this run() method was called by Subject.doAs(),
// so the service's credentials (Service Principal Name and password) are already
// available in the Subject
GSSCredential serviceCredentials = gssmgr.createCredential(serviceName,
        GSSCredential.INDEFINITE_LIFETIME, …
Run Code Online (Sandbox Code Playgroud)

java kerberos jgss spring-security-kerberos

6
推荐指数
1
解决办法
3960
查看次数

如何使用java GSS + JAAS获得可再生的kerberos票

我使用jTDS连接到SQLServer.在内部,jTDS使用GSS获取kerberos的服务票证并建立安全的上下文.由于我的应用程序是长期存在的,并且我的连接一直保持活动,所以我需要将kerberos的服务票据更新,以便允许SQL服务器自行续订(kdc策略设置为在12小时后使所有票证到期) ).

jTDS获取kerberos令牌的做法(或多或少)如下:

GSSManager manager = GSSManager.getInstance();

// Oids for Kerberos5
Oid mech = new Oid("1.2.840.113554.1.2.2");
Oid nameType = new Oid("1.2.840.113554.1.2.2.1");

// Canonicalize hostname to create SPN like MIT Kerberos does
GSSName serverName = manager.createName("MSSQLSvc/" + host + ":" + port, nameType);

GSSContext gssContext = manager.createContext(serverName, mech, null, GSSContext.DEFAULT_LIFETIME);
gssContext.requestMutualAuth(false);
gssContext.requestCredDeleg(true);

byte[] ticket = gssContext.initSecContext(new byte[0], 0, 0);
Run Code Online (Sandbox Code Playgroud)

我怀疑的是我获得的机票不可更新.我正在通过执行以下操作来检查:

ExtendedGSSContext extendedContext = (ExtendedGSSContext) gssContext;
boolean[] flags = (boolean[]) extendedContext.inquireSecContext(InquireType.KRB5_GET_TKT_FLAGS);
System.out.println("Renewable = " + flags[8]);
Run Code Online (Sandbox Code Playgroud)

在我们的特定配置中,GSS从JAAS登录模块获取kerberos TGT.我们将以下变量设置为false,-Djavax.security.auth.useSubjectCredsOnly=false并在login.cfg文件中配置以下登录模块:

com.sun.security.jgss.krb5.initiate { …
Run Code Online (Sandbox Code Playgroud)

java kerberos jtds jaas jgss

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

Java 12 中的“Windows 上的默认本机 GSS-API”是否可以通过使用执行 JVM 的用户的 Krb5 主体来支持 JAAS 的 SSO?

Vanilla Krb5LoginModule 正在运行,提示输入信用信息

到目前为止,在我的适度使用中JAAS -> JGSS -> Kerberos -> Windows,我设置了一个Krb5LoginModuleWhen I do:

Subject.doAs(
    new LoginContext(...)).login(),  // subject
    new MyPrivilegedAction()         // action
)
Run Code Online (Sandbox Code Playgroud)

...系统提示我输入凭据,并且操作成功。

使用 TGT Session Key hack,可以避免提示输入信用信息

如果我也添加useTicketCache=true到登录模块,并且如果我忍受设置的安全隐患HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\AllowTgtSessionKey=1并且不使用 Windows 10 Credential Guard,那么操作就会成功,而无需提示输入凭据。

Java 12 为我们提供了默认的本机 GSS-API 库,即使在 Windows 上也是如此

Java 11.0.10引入了在 Windows 上使用本机 GSS-API 实现的可能性,但没有提供默认实现。Java 12添加了 GSS-API 的本机实现,可桥接到 Windows SSPI。这避免了冒险的需要AllowTGTSessionKey

使用本机 GSS-API 也可以,提示输入信用信息

在 Windows 上的 Java 15.0.2(Oracle 和 OpenJDK)上,尽管文档仍然(现在错误地)声称“Windows …

java windows kerberos jaas jgss

5
推荐指数
0
解决办法
938
查看次数

Tomcat无法使用spnego进行身份验证,“无法找到默认领域”

我正在使用http://spnego.sourceforge.net/spnego_tomcat.html教程尝试将Tomcat配置为使用spnego。

Hello_KDC.java工作正常,并且能够进行身份验证。如果我使用了错误的密码,则会收到错误Exception,因此它可以正常工作。

但是,当我尝试将该教程用于Tomcat时,它就坏了。Tomcat ROOT / index.jsp变为空白,并且在监视时我看到它返回404。log \ host-manager.2013-02-22.log具有以下内容:

Fev 22, 2013 1:39:03 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter SpnegoHttpFilter
javax.servlet.ServletException: javax.security.auth.login.LoginException: Cannot locate default realm
    at net.sourceforge.spnego.SpnegoHttpFilter.init(SpnegoHttpFilter.java:198)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4656)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5309)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.security.auth.login.LoginException: Cannot locate default realm
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

tomcat kerberos spnego jgss

3
推荐指数
2
解决办法
3万
查看次数

标签 统计

jgss ×6

kerberos ×6

java ×5

jaas ×2

spring-security-kerberos ×2

jtds ×1

soap ×1

spnego ×1

tomcat ×1

windows ×1