我使用GSS-API创建了2个演示Kerberos客户端.一个在Python3中,第二个在Java中.两个客户端似乎大致相同,并且两者都"起作用",因为我获得了我的Java GSS-API服务主体接受的服务票证.
但是在测试时我注意到Python客户端将服务票据保存在kerberos凭证缓存中,而Java客户端似乎没有保存票证.
我使用"klist"来查看凭证缓存的内容.
我的客户使用FreeIPA作为Kerberos环境在Lubuntu 17.04虚拟机上运行.我正在使用OpenJDK 8 u131.
问题1: Java GSS-API是否不保存凭证缓存的服务票证?或者我可以更改我的代码吗?
问题2:服务票据未保存到缓存这一事实是否有任何缺点?
我的假设是缓存的服务票据减少了与KDC的交互,但评论了如何使用Windows Java客户端保存Kerberos服务票证?建议事实并非如此,但是这个Microsoft技术说明"每次想要访问这个特定服务器时,客户端都不需要返回KDC".
问题3:来自python客户端的缓存服务票证在几分钟后消失 - 在到期日之前很久.是什么导致他们消失?
Python代码
#!/usr/bin/python3.5
import gssapi
from io import BytesIO
server_name = 'HTTP/app-srv.acme.com@ACME.COM'
service_name = gssapi.Name(server_name)
client_ctx = gssapi.SecurityContext(name=service_name, usage='initiate')
initial_client_token = client_ctx.step()
Run Code Online (Sandbox Code Playgroud)
Java代码
System.setProperty("java.security.krb5.conf","/etc/krb5.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
GSSManager manager = GSSManager.getInstance();
GSSName clientName;
GSSContext context = null;
//try catch removed for brevity
GSSName serverName =
manager.createName("HTTP/app-srv.acme.com@ACME.COM", null);
Oid krb5Oid = new Oid("1.2.840.113554.1.2.2");
//use default credentials
context = manager.createContext(serverName,
krb5Oid,
null, …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个JAVA程序,它将获取我的Windows用户凭据,然后连接到我的unix盒上的kerberos并进行身份验证并允许我使用服务,例如LDAP服务器.
我发现的所有示例都倾向于在运行中询问我的密码,我不希望这样 - 我希望能够运行该程序并且'如果通过魔法'即可通过kerberos认证.
任何链接和示例表示赞赏.
我的OpenLDAP中有一组用户,我希望从中获取一些信息,例如"cn"和"userPassword".
但是,当我检索这些详细信息时,密码不是纯文本,即使它在我的LDAP服务器中设置为此密码.
任何想法如何解决这个问题?
我在我的机器上遇到了这个问题,我花了几个小时来解决这个问题,我希望它可以帮助其他遇到同样问题的人。
我正在为Java Web应用程序构建一个Active Directory单点登录身份验证系统(使用SPNEGO/Kerberos),一切都可以正常使用Firefox或(据报道)Safari,但Internet Explorer会导致异常:
GSSException: Channel binding mismatch (Mechanism level: ChannelBinding not provided!)
Run Code Online (Sandbox Code Playgroud)
事实上,我认为IE在安装Windows补丁之前有效.
我正在编写一些使用 SASL GSSAPI 对 Active Directory 进行身份验证的 Java 代码。大多数情况下,这段代码运行良好,但对于一位用户,我得到了响应:
javax.naming.AuthenticationException: [LDAP: error code 49 - 8
0090304: LdapErr: DSID-0C0904D1, comment: AcceptSecurityContext error, data 568,
v1772 ]
Run Code Online (Sandbox Code Playgroud)
我知道 49 表示这是一个身份验证失败,并且相关的子代码是 568,但我只知道该数据的以下含义:
到目前为止,我无法从 Microsoft 找到这些错误代码的权威来源(此列表是从论坛帖子拼凑而成的),而且我找不到与该 568 错误相关的任何内容。
有谁知道这是什么意思?
编辑:看起来这个列表的来源来自 IBM 的这个文档