我正在使用森林架构中的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) 我为WCF服务创建了一个轴客户端(客户端由Eclipse生成,使用WSDL作为输入).
使用HTTP时客户端工作正常.
使用HTTPS时,我收到以下异常:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
我理解错误,但我不想给它一个证书所在的位置.
我想告诉Axis避免这一步(接受任何证书而不检查它).
我知道怎么用HttpsURLConnection(创建一个什么都不做的自定义验证器),但我不知道怎么用轴...(我怎么能告诉轴使用我的自定义验证器,或者更好,怎么能我告诉它完全忽略这一步骤.
有人能帮我吗?
谢谢,
玛坦
我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定。
我收到此错误:
javax.naming.AuthenticationException:GSSAPI [根异常是 javax.security.sasl.SaslException:GSS 启动失败 [由 GSSException 引起:未提供有效凭据(机制级别:票证请求中的选项设置无效。(101))]]
我认为(不确定)它在过去有效。为了解决其他问题,我尝试了“kinit”。从那时起停止工作。我什至删除了缓存文件(在 Windows 中找不到 kclear),但仍然存在这个问题。
我该如何解决?
我想编写一个代码,从证书的“ 使用者备用名称”下的“ 其他名称”中读取“ 用户主体名称”。
我有一个X509证书。
我做了(证书是X509Certificate对象):
Collection san = certificate.getSubjectAlternativeNames()
Run Code Online (Sandbox Code Playgroud)
如何获得用户主体名称?
谢谢!
我正在尝试使用JAVA从Active Directory获取TGT进行身份验证.
这是我的代码:
try
{
URL localURL = super.getClass().getResource("jaas_ntlm_configuration.txt");
System.setProperty("java.security.auth.login.config", localURL.toString());
LoginContext localLoginContext = new LoginContext("GetLoginNameKerberos", new SampleCallbackHandler());
localLoginContext.login();
Subject localSubject = localLoginContext.getSubject();
.....
}
catch (LoginException localLoginException) {
localLoginException.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
此代码在一台服务器上运行,但在其他服务器上,它在"localLoginContext.login();"上失败.使用此输出:
>>>KinitOptions cache name is C:\Users\x\krb5cc_x
LSA: Found Ticket
LSA: Made NewWeakGlobalRef
LSA: Found PrincipalName
LSA: Made NewWeakGlobalRef
LSA: Found DerValue
LSA: Made NewWeakGlobalRef
LSA: Found EncryptionKey
LSA: Made NewWeakGlobalRef
LSA: Found TicketFlags
LSA: Made NewWeakGlobalRef
LSA: Found KerberosTime
LSA: Made NewWeakGlobalRef
LSA: Found String
LSA: Made NewWeakGlobalRef
LSA: …Run Code Online (Sandbox Code Playgroud)