你好,请教一个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 Demo2public 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端口)通讯问题的主要内容,如果未能解决你的问题,请参考以下文章