你好,请教一个java与AD域SSL(636端口)通讯问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你好,请教一个java与AD域SSL(636端口)通讯问题相关的知识,希望对你有一定的参考价值。

我的java程序有修改密码的功能因此需与AD域做SSL认证,但是涉及到一个证书的问题,我不知道这个证书该由服务器端生成还是客户端去申请。我尝试过申请证书及导出根证书做keystore文件,但是总是报Remote host closed connection during handshake错误,请问有什么解决方案吗?

大体是这样的,目前手头没有SSL的AD,没法帮助你测试public class Demo2 
    public LdapContext getConnectionFromFool() throws NamingException   
        String keystore = "D:/soft02/JDK/jre/lib/security/cacerts";
        System.setProperty("javax.net.ssl.trustStore", keystore);  
        Properties env = new Properties();  
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");  
        env.put(Context.PROVIDER_URL, "ldap://192.168.0.1:389");  
        env.put(Context.SECURITY_AUTHENTICATION, "simple");  
        env.put(Context.SECURITY_PRINCIPAL,"cn=test@domain.com");  
        env.put(Context.SECURITY_PRINCIPAL,"cn=administrator,cn=Users,dc=all,dc=com");  
        env.put(Context.SECURITY_CREDENTIALS, "123123");  
        env.put(Context.SECURITY_PROTOCOL, "ssl");  
        env.put("com.sun.jndi.ldap.connect.pool", "true");  
        env.put("java.naming.referral", "follow"); 
        InitialLdapContext dcx = null;
        dcx = new  InitialLdapContext(env, null);
        return dcx;
     
     

追问

我这份代码有了,主要是想知道怎么样弄到一个证书。

追答

服务器证书? 得向网管要

追问

你说的服务器证书是什么类型的?企业根证书吗?但是他们安装的是独立根证书。拿下来不行,是否可以通过申请来获取一个服务器验证的证书?

参考技术A 同等些问题

java 如何获取当前AD域用户名?

参考技术A Java直接读AD很麻烦
后来通过.net读取,发布成webservice给java访问,简单很多追问

你好 谢谢你的解答 我们这不用.net,因为我们的OA系统要跟AD域同步,然后AD域登录后直接就能访问OA,而不需要二次登录,我只想知道java如何判断当前登录的用户是否是AD域用户,是的话就直接登录系统,不在输入用户名密码。

追答

问题点分析:
情况一:已知道当前登录用户的用户名ID, 需要解决的问题是 验证该用户是否是AD域用户?
如果已经知道当前的用户ID,通过java的Jndi 操作 LDAP (AD)即可,查询验证

情况二:尚不知道当前登录用户的用户名ID, 需要解决的问题是获取域账号,并验证该用户名ID是否在域中?
在你的登录首页java入获取域用户的windows脚本信息(记得VB有,其他的可以网上搜索一下),然后做登录判断(同样是用JNDI检索LDAP或AD)

本回答被提问者采纳

以上是关于你好,请教一个java与AD域SSL(636端口)通讯问题的主要内容,如果未能解决你的问题,请参考以下文章

LADP 启用SSL开启636端口,实现第三方集成

LADP 启用SSL开启636端口,实现第三方集成

LADP 启用SSL开启636端口,实现第三方集成

JAVA修改AD域密码_免证书认证

java 如何获取当前AD域用户名?

LdapConnection 与 PrincipalContext