问题标签 [gssapi]

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 投票
2 回答
12628 浏览

java - GSSException:消息流已修改 (41)

我正在使用森林体系结构中的 LDAP(所有服务器和我的服务器都是 Windows)。我正在使用 NTLM 身份验证绑定到 AD。

我有一个针对 LDAP 服务器执行操作的 JAVA 代码。

代码被包装为一个 tomcat servlet。

直接运行 JAVA 代码时(仅将 LDAP 身份验证代码作为应用程序执行),绑定对本地域(本地域 = 我登录到 Windows,并使用该域的用户运行此过程)和外部域都有效.

将 JAVA 代码作为 servlet 运行时,绑定可以工作并验证来自一个域的用户,但如果我试图验证来自其他域的用户,它就不起作用,它不会起作用(只有当我重新启动 tomcat 时它才会起作用)。

我遇到了一个例外:

我会提到它是相同的代码,具有相同的配置和相同的 krb5 文件。

编辑: 更多信息:

这是我的代码:

我的 jaas_ntlm_configuration.txt 文件包含:

我的 krb5.conf 文件是:

我添加了以下作为java参数:

如果我总是使用相同的子域调用 func("SUB*.DOMAIN.COM", "DDC.SUB*.DOMAIN.COM") - 它会起作用,但是如果我先调用一个子域然后再调用另一个子域,则第二个会失败。

更多信息:

这是 krb5.debug=true 的输出:

我能做些什么?我做错了什么吗?

谢谢。

0 投票
3 回答
4300 浏览

java - GSSAPI 中的 javax.naming.AuthenticationException

我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定。

我收到此错误:

javax.naming.AuthenticationException:GSSAPI [根异常是 javax.security.sasl.SaslException:GSS 启动失败 [由 GSSException 引起:未提供有效凭据(机制级别:票证请求中的选项设置无效。(101))]]

我认为(不确定)它在过去有效。为了解决其他问题,我尝试了“kinit”。从那时起停止工作。我什至删除了缓存文件(在 Windows 中找不到 kclear),但我仍然有这个问题。

我该如何解决?

0 投票
1 回答
390 浏览

java - JAVA & GSSAPI:清除缓存

我编写了一个简单的 java 应用程序,它使用 GSSAPI 来连接到 Active Directory (Kerberos SSO)。

我有 2 个领域和 KDC:x 和 y。

如果我将使用领域/KDC x 运行该工具 - 该工具将起作用。

如果我将使用领域/KDC y 运行该工具 - 该工具也可以工作。

如果我将运行该工具以使用领域/KDC x(登录、注销、登录、注销)执行 2 次身份验证 - 有效。

领域/KDC y 的结果相同。

问题是当我尝试在两个领域/KDC 之间切换时:登录 x、注销 x、登录 y、注销 y - 尝试登录第二个时抛出异常:

GSSException:机制级别:消息流已修改 (41))

只是为了澄清 - 只有当我使用 2 个不同的领域/KDC(当然每次一个),而不在这两个之间重新启动整个应用程序时,才会出现问题。

我认为 java/gssapi 以某种方式缓存了领域或 krb 票证或其他东西。

问题是我怎样才能清除这个缓存(而不杀死整个应用程序),或者如果没有这样的缓存/静态变量,我怎样才能让它工作?

谢谢!

0 投票
1 回答
4569 浏览

java - 无法使用 kerberos 票证使用 java 代码创建 hadoop 文件

我们的hadoop集群使用kerberos,所以我们需要先使用kinit,然后使用类似“hadoop fs -ls /”的命令。现在我使用 jaas 和 gssapi 登录并在集群中创建文件,但失败了。这是我的代码:

jaas.conf 如下:

我的登录用户名为 root,在使用“hadoop jar ./client.jar”运行此代码之前,我运行 kdestory 删除 kerberos 缓存,然后出现以下错误:

我不知道如何使它工作,任何人都可以帮助我,非常感谢。

0 投票
1 回答
28035 浏览

java - 带有 Java 的 Kerberos

我正在尝试从 Java 登录 kerberos kdc。但是Java正在抛出异常。似乎登录成功,但有些东西停止登录。我不知道为什么?有人有解决这个问题的方法吗?这是我的java系统输出:

还有我的java代码:

0 投票
1 回答
8815 浏览

curl - 使用 SSPI 进行 Kerberos 身份验证

注意:我设法取得了一些进展,请参阅我当前问题的编辑,谢谢。


我想在 Windows 上使用 libcurl 来访问具有 Kerberos/GSSAPI 身份验证的网站。我首先尝试使用 MIT Kerberos 解决它,但我还需要使用 SSPI 进行 NTLM 身份验证(libcurl 不支持同时使用来自两个不同实现的两者)。所以我希望使用 Windows SSPI 库在 Kerberos 中进行身份验证。我设法编译了带有 SSPI 和 SPNEGO 支持的 libcurl。

现在我的问题是我需要使用提供的凭据连接到任何提供的领域(它可能是当前用户的领域或其他用户的领域)。据我了解,我需要从 secur32.dll/security.dll 调用 AcquireCredentialsHandle 和 InitializeSecurityContext 来检索 Kerberos 票证。

但每次我试图让它发挥作用时,我:

  1. 不要从 SSPI 缓存中提供的凭据/领域的 DC 获取任何票证(我正在使用 kerbtray.exe 来查看条目)。
    • 使用这些方法时,我应该在此缓存中看到一张票吗?
  2. 在调用 ImpersonateSecurityContext 和 InitializeSecurityContext/AcceptSecurityContext 的客户端/服务器环回并查看 Wireshark 中的数据包后使用 libcurl,我看到 libcurl 不使用任何提供的凭据并回退到 NTLM(这只会导致身份验证失败)
    • 环回客户端/服务器是正确的行为吗(我在网上找不到任何其他实现的例子)?
    • 假设模拟成功,libcurl 是否应该使用线程的模拟凭据?
    • libcurl 是否完全支持带有 SSPI 的 NTLM + Kerberos(我什至不确定......)?

为了方便调试和测试,你知道有什么工具可以在 SSPI 缓存中添加一个条目,比如 MIT Kerberos 库中的 kinit 吗?我正在使用 Windows Server 2003 资源工具包工具,但找不到任何此类工具...

任何帮助将不胜感激 !


编辑

好吧,我发现了如何使用 libcurl 制作我想要的东西。最后我假设我必须事先对 SSPI 做一些工作,但 curl 正确地支持了这一点。

当使用带有 SSPI 和 SPNEGO 标志的正确构建版本的 curl 时,curl 将对 kerberos 领域进行身份验证并将其存储在 LSA 缓存中。

使用 curl.exe 进行测试时,您需要指定--negotiate参数以及用户名/密码。但是,在使用 libcurl 时,只需将 CURLOPT_HTTPAUTH 选项设置为包含 CURLAUTH_GSSNEGOTIATE 的任何内容(例如 CURLAUTH_ANY)。在我的测试中,libcurl 完成了预期的 Kerberos握手

  1. 联系 Web 服务器(web.b.com,其中 B.COM 是 Web 服务器的 kerberos 领域)
  2. 收到未经授权的答案,WWW-Authenticate参数设置为协商
  3. Libcurl/SSPI 将 TGS-REQ 发送到当前用户所在域的域控制器 (DC)(比如说 A.COM)
  4. 不知何故,下一个 TGS-REQ 被发送到 Web 服务器 (B.COM) 的域控制器
  5. 收到域 B.COM 的 Kerberos 票证并在 LSA 缓存中添加条目(可通过 klist.exe 或 kerbtray.exe 查看)
  6. Libcurl 使用授权信息(GSS-API)向 Web 服务器发送 HTTP 请求

但是,这是我的新问题,所有这些握手都是使用当前记录的凭据进行的,比如user1@A.COM。由于 A.COM 和 B.COM 之间存在信任,并且我的用户可以访问,因此它可以工作。我宁愿使用提供的凭据 ( user2.B.COM ) 登录?

另外,我不太确定是否可以在与当前登录的用户不同的用户的 LSA 缓存中添加一个条目?

如何通过模拟用户user2.B.COM以使 libcurl 可以访问与该用户关联的票证以对 Web 服务器进行身份验证来完成这项工作?

0 投票
1 回答
1119 浏览

java - InitialLdapContext 在 Java 6 和 Java 7 中失败

我正在使用 JAVA 5 成功使用 GSSAPI。使用 JAVA 6 和 7,InitialLdapContext 调用失败并显示以下堆栈跟踪:

有人知道 Java 6 或 7 出了什么问题吗?

ktab 文件是使用 jre 7 的 ktab 工具创建的。

"c:\Program Files\Java\jre7\bin\ktab.exe" -a user@DOMAIN.DE 密码 -k my.keytab -n 0 "c:\Program Files\Java\jre7\bin\ktab.exe" -a 服务/主机@DOMAIN.DE 密码 -k my.keytab -n 0

Windows 服务器 2008 活动目录

请记住:如果我使用的是 Java 5,InitialLdapContext 调用会按预期工作。

提前致谢

迈克尔

0 投票
0 回答
678 浏览

ios - iOS 5 或 6 是否支持 Kerberos (GSS API)?

我想我已经研究过了,但还没有找到正确的答案。这里有人说 iOS 中不支持 Kerberos,但是,以下链接和发现似乎指向相反的方向。

Apple 表示 iOS 中对 GSS API 有一定的支持。但令人惊讶的是,Apple 文档在这个主题上相当糟糕。iOS 5 中的新增功能:通用系统安全框架中有备注,参考 RFC 2743(关于​​ GSS API 包括 Kerberos)和头文件以获取更多详细信息。在 iOS 技术概述中可以看到一行:设备框架

当您查看时,/System/Library/Frameworks/GSS.framework/Versions/A/Headers您可以在那里找到这些标题:

  • gssapi_krb5.h
  • gssapi_netlogon.h
  • gssapi_ntlm.h
  • gssapi_spnego.h
  • gssapi.h

摘自 gssapi_krb5.h:

所以人们会期望必须有一些支持。由于我是新手,目前声誉低,我只能提供两个链接。尽管我已经阅读了如何编写好问题的说明,但如果您觉得有必要,请帮助我改进我的问题。

0 投票
1 回答
17994 浏览

kerberos - Kerberos:UPN 和 SPN 之间的区别

我现在正在使用 GSSAPI 对跨平台应用程序进行 kerberizing。虽然我不清楚 UPN 和 SPN 之间的区别。

开发环境是 CentOS 6.4 上的 Samba4 AD DC 服务器,带有 Windows server 2008 R2 域中的成员框,例如EXAMPLE.COM(您可能会好奇为什么不直接使用 Win2008 作为 DC。正如我之前所说,该应用程序是跨平台的,我现在正在这个设置中测试。正常的 Win DC-Linux MEM 设置工作正常。)。我创建了一个新用户foobar:users来运行应用程序。当我使用foobar@EXAMPLE.COMUPN 来针对 Kerberos 对应用程序进行身份验证时,我不断收到

Kerberos:主体可能无法充当服务器错误

在Samba 邮件列表上的一个线程app/dc.example.com之后,我想我应该为 UPN 创建一个服务主体名称,例如samba-tool

这次我会收到另一个错误

Samba4 KDC - 在 hdb 中找不到这样的条目

我的问题是 UPN 和 SPN 之间有什么区别?通过samba-tool spn list foobar,它说foobar servicePrincipalName app/dc.example.com。如何将 UPN 与 SPN 关联?

非常感谢。

0 投票
1 回答
1981 浏览

c - 如何使用 GSS API 更新 kerberos 服务票证

我使用 GSS API 使用 Kerberos 身份验证(gss_init_sec_context 调用)通过 SMB 2.0 服务器对自己进行身份验证。我知道我可以使用 kinit -R 命令更新 TGT。但我也希望能够更新我获得的服务票。

在协议规范中,它说客户端需要更新 kerberos 票证。

是否可以更新服务票?或者我应该创建一个新的上下文?

任何与使用 GSS api 的 SMB 2.0 重新身份验证相关的指针也非常受欢迎