【问题标题】:Using installed java key store certificate to connect to ldap使用已安装的 java 密钥库证书连接到 ldap
【发布时间】:2018-03-01 15:17:00
【问题描述】:

我认为这个问题可能已经在某些地方得到了回答,但到目前为止我还没有找到任何解决方案。我的问题是,我想连接到 LDAP 并从 ldap 目录中找到一个用户,但这里的问题是,它是一个安全的 LDAP,所以我必须通过证书向 ldap 服务器进行身份验证。所以,我已经使用以下命令安装了该证书

keytool -importcert -file D:\KSTLMRADD01.dev.chartercom.com.cer -keystore cacerts -alias KSTLMRADD01.dev.chartercom.com.cer

所以通过使用 system.setproperty 我正在设置 javax.net.ssl.truststore 位置和密钥库密码,由于我在 java 密钥库中有大约 100 个证书,因此在建立连接时无法使用适当的证书,请参阅下面的代码,如果有任何错误或建议,请告诉我。任何帮助都会非常充分。

public class TestLdap{
public static void main(String[] args){
System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.8.0_152\\jre\\lib\\security\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");


    try {
        // use the service user to authenticate
        Hashtable<String, Object> serviceEnv = new Hashtable<String, Object>();
        serviceEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        serviceEnv.put(Context.PROVIDER_URL, ldapUrl);
        serviceEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
        serviceEnv.put(Context.SECURITY_PROTOCOL, "ssl");
        serviceEnv.put(Context.SECURITY_PRINCIPAL, serviceUserDN);
        serviceEnv.put(Context.SECURITY_CREDENTIALS, serviceUserPassword);
        LdapContext ctx = new InitialLdapContext(environment, null);
        ctx.setRequestControls(null);
        DirContect context = new InitialDirContext(environment);NamingEnumeration<?> namingEnum = ctx.search("ou=service_accounts,dc=com", "(objectclass=user)", getSimpleSearchControls());
while (namingEnum.hasMore ()) {
    SearchResult result = (SearchResult) namingEnum.next ();    
    Attributes attrs = result.getAttributes ();
    System.out.println(attrs.get("sn"));

}
namingEnum.close();
ctx.close();
}}

所以我尝试了 DirContext 和 LdapContext 但两者都不适合我。

【问题讨论】:

    标签: java ssl ldap


    【解决方案1】:

    通过在我的代码中设置以下两行,我可以信任这些证书。

    System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.8.0_152\\jre\\lib\\security\\cacerts");
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
    

    【讨论】:

    • 感谢您回来分享您的结果!
    猜你喜欢
    • 2017-05-10
    • 2018-08-18
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2014-02-12
    相关资源
    最近更新 更多