我有以下代码:
public static void main(String args[]){
try {
//String ticket = "Negotiate YIGCBg...==";
//byte[] kerberosTicket = ticket.getBytes();
byte[] kerberosTicket = Base64.decode("YIGCBg...==");
GSSContext context = GSSManager.getInstance().createContext((GSSCredential) null);
context.acceptSecContext(kerberosTicket, 0, kerberosTicket.length);
String user = context.getSrcName().toString();
context.dispose();
} catch (GSSException e) {
e.printStackTrace();
} catch (Base64DecodingException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
当然它失败了.这是例外:
GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
我不知道我应该做些什么来解决这个问题.老实说,我真的不懂Kerberos.
我通过发送WWW-Authenticate带有"Negotiate" 的适当标题的401 作为值来获得此票.浏览器立即使用authorization包含此票证的标题再次发出相同的请求.
我希望我能验证票证并确定用户是谁.
我需要keytab文件吗?如果是这样,我将在哪个凭据下运行?我正在尝试将Kerberos票证用于网站的身份验证.凭据是否是IIS的凭据?
我错过了什么?
更新1 从Michael-O的回复中,我做了一些谷歌搜索并找到了这篇文章,这引导我阅读这篇文章.
上 …
所以我有一些代码,我正在测试,以确保它可以很好地进行身份验证.它可以很好地对抗直接的kerberos,所以我认为应该只有一些与AD的轻微打嗝.不幸的是,我无法解决KrbException:KDC不支持加密类型(14).
我知道错误是加密类型不匹配.但我可以开得很好,这只是在我遇到问题的代码中.我没有设置任何东西,所以我认为它应该继承与kinit相同的默认值,但显然情况并非如此.
代码-
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.krb5.realm", "TEST.SQRRL.COM");
System.setProperty("java.security.krb5.kdc", "172.16.101.128");
System.setProperty("java.security.auth.login.config", "./conf/jaas.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "true");
// "Client" references the JAAS configuration in the jaas.conf file.
LoginContext loginCtx = null;
loginCtx = new LoginContext("Server", new LoginCallbackHandler("test".toCharArray()));
loginCtx.login();
subject = loginCtx.getSubject();
Run Code Online (Sandbox Code Playgroud)
和jaas.conf
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
storeKey=true
useTicketCache=true
principal="accumulo@test.SQRRL.COM";
};
Run Code Online (Sandbox Code Playgroud)
并且,堆栈跟踪 -
>>>KRBError:
sTime is Tue Nov 27 18:16:36 EST 2012 1354058196000
suSec is 257213
error code is 14
error Message is KDC has no support for encryption type
realm is test.SQRRL.COM
sname …Run Code Online (Sandbox Code Playgroud) 我正在使用森林架构中的LDAP(所有服务器和我的服务器都是Windows).我使用NTLM身份验证绑定到AD.
我有一个JAVA代码,可以对LDAP服务器执行操作.
代码被包装为tomcat servlet.
直接运行JAVA代码(只是作为应用程序执行LDAP身份验证代码)时,绑定对本地域(本地域=我登录到Windows,并与此域的用户运行此进程)和外部域都有效.
当将JAVA代码作为servlet运行时,绑定工作并对来自一个域的用户进行身份验证,但如果我尝试对来自其他域的用户进行身份验证,则无法正常工作,它将无法工作(仅当我重新启动tomcat时它才会起作用).
我得到一个例外:
GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Message stream modified (41))]]
Run Code Online (Sandbox Code Playgroud)
我会提到它是相同的代码,具有相同的配置和相同的krb5文件.
编辑: 更多信息:
这是我的代码:
public void func(String realm, String kdc) {
try {
URL configURL = getClass().getResource("jaas_ntlm_configuration.txt");
System.setProperty("java.security.auth.login.config", configURL.toString());
System.setProperty("java.security.krb5.realm", realm);
System.setProperty("java.security.krb5.kdc",kdc);
// If the application is run on NT rather than Unix, use this name
String loginAppName = "MyConfig";
// Create login context
LoginContext lc = new LoginContext(loginAppName, new SampleCallbackHandler());
// Retrieve the information on the …Run Code Online (Sandbox Code Playgroud) 我正在使用kerberos进行SASL身份验证的openLDAP.我遇到了这个身份验证的问题.
首先,我用kinit获得kerberos票.当我制作一个klist时,会显示该票证.所以,没问题.但是当我试图制作ldapwhoami时.我收到一个错误:
[hue@sandbox ~]$ kdestroy
[hue@sandbox ~]$ kinit vishnu
Password for vishnu@MORTO.COM:
[hue@sandbox ~]$ klist
Ticket cache: _FILE:/tmp/krb5cc_1007
Default principal: vishnu@MORTO.COM
Valid starting Expires Service principal
05/29/14 06:42:52 05/29/14 16:42:52 krbtgt/MORTO.COM@MORTO.COM
renew until 06/05/14 06:42:48
05/29/14 06:42:57 05/29/14 16:42:52 ldap/morto.com@MORTO.COM
renew until 06/05/14 06:42:48
[hue@sandbox ~]$ ldapwhoami
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Other (e.g., implementation specific) error (80)
additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information ()
Run Code Online (Sandbox Code Playgroud)
我不知道在哪里搜索.请帮我.
我有一个简单的基于Thrift的java应用程序.这非常简单,只不过是在java中使用Thrift的"Hello World"消息传输.我被告知我需要为我的消息添加Kerberos支持.我做了一些谷歌搜索,并且惊讶于Thrift还没有某种形式的Kerberos支持(或者如果确实如此,我找不到它).我想过使用GSSAPI编写自己的包装器,但是我无法打开/解包我的Thrift消息,因为它会破坏Thrift消息格式.
有没有人曾经Kerberized Thrift?..或者知道怎么做?
提前致谢.
i am try to login kerberos kdc from Java. But Java is throwing exception. Seems like login is successful but something is stops login. I dont know why ? Someone have solution for this problem? Here is my java system output:
Debug is true storeKey false useTicketCache true useKeyTab false doNotPrompt false ticketCache is null isInitiator true KeyTab is null refreshKrb5Config is true principal is null tryFirstPass is false useFirstPass is false storePass is false clearPass is false
Refreshing Kerberos …Run Code Online (Sandbox Code Playgroud) 我现在正在使用GSSAPI来破解跨平台应用程序.虽然我不清楚UPN和SPN之间的区别.
开发环境是CentOS 6.4上的Samba4 AD DC服务器,Windows服务器2008 R2是域中的成员盒,例如EXAMPLE.COM(您可能很好奇为什么不直接使用Win2008作为DC.正如我之前所说,应用程序是跨平台的,我现在正在测试这个设置.正常的Win DC-Linux MEM设置工作正常.).我创建了一个新用户foobar:users来运行该应用程序.当我使用foobar@EXAMPLE.COMUPN来验证针对Kerberos的应用程序时,我一直在接收
Kerberos:Principal可能不会充当服务器错误
在Samba maillist上的一个帖子之后,我想我应该app/dc.example.com为UPN 创建一个服务主体名称samba-tool
samba-tool spn add app/dc.example.com foobar
Run Code Online (Sandbox Code Playgroud)
这次我会收到另一个错误
Samba4 KDC - 在hdb中找不到这样的条目
我的问题是UPN和SPN之间有什么区别?通过samba-tool spn list foobar,它说foobar 具有 servicePrincipalName app/dc.example.com.我怎么能将UPN与SPN联系起来?
非常感谢你.
场景:AD域中的Windows服务器仅使用SVNSERVE(没有Apache)托管Subversion存储库,而不是 VisualSVN.
目标:通过SASS通过GSSAPI将用户身份验证到Subversion存储库,通过Kerberos验证到Windows域.
多个站点中频繁发布的帖子表明,在此配置中,用户通常无法获得"无法获取SASL机制列表".我没见过任何实际运行的实例.有没有人有这个运行?
我问这个问题是因为2011年在Gentoo论坛上发帖,其中正是在这个场景中的某个人审查了相关的源代码压缩包并得出结论,虽然这种配置可能一度有效,但它所需的文件不再是在源头.
GEntoo论坛讨论,海报声称svnserve + gssapi + sasl曾一度工作,但不再有.
现在,我并不认为这种说法是准确的,但我确实知道自己陷入了同样的困境,而且我还没有看到任何声称对此类设置声称"胜利"的帖子.如果有,请告知详细信息!
提前谢谢了.
我目前正在尝试让python 的gssapi模块在windows上运行.我的目标是使用python模块ldap3使用Active Directory进行身份验证.gssapi是这项工作的必要条件.但是,安装失败,因为找不到krb5-config.在Linux上,它很容易安装.我安装了Kerberos for Windows,但它没有krb5-config,我在其他地方找不到它(除了Linux).有谁知道在哪里可以找到所需的工具或如何继续(如果可能的话)?
Microsoft 引入了“LdapEnforceChannelBinding”选项,要求客户端提供通道绑定信息,以便通过 SSL/TLS 连接到 AD。在 AD 中启用此功能后,使用 Kerberos/LDAP 身份验证的 Java 应用程序会收到来自服务器的以下错误。
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090346: LdapErr: DSID-0C09056D, comment: AcceptSecurityContext error, data 80090346, v2580
Run Code Online (Sandbox Code Playgroud)
我的代码使用 LoginContext 与 GSSAPI 安全机制进行身份验证和 DirContext。
有没有办法在 Java 代码中启用通道绑定来解决这个问题?