java - 在 java 中使用本地证书颁发机构的证书通过 SSL 连接 Active Directory
问题描述
我域中的所有 PC 都预装了 CA 证书。我想要的只是通过 SSL 从我的 java 程序连接到 LDAP(实际上是 Active Directory)。
我已经尝试过没有 SSL 的简单连接,下一个代码对我来说工作正常:
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "LDAP://" + domain + ":389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, username + "@" + domain);
env.put(Context.SECURITY_CREDENTIALS, securityToken);
context = new InitialDirContext(env);
现在我正在尝试使用类似的代码来创建 SSL 连接,使用来自 Windows 证书存储的证书:
Hashtable<String, String> env = new Hashtable<>();
System.setProperty("javax.net.ssl.trustStore", "NUL");
System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "LDAPS://" + domain + ":636");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, username + "@" + domain);
env.put(Context.SECURITY_CREDENTIALS, securityToken);
env.put(Context.SECURITY_PROTOCOL, "ssl");
context = new InitialDirContext(env);
它让我有一些例外......
javax.naming.CommunicationException: simple bind failed
[Root exception is java.net.SocketException: Connection or outbound has closed]
Ldp.exe 可以通过 SSL 连接到 AD 没有任何问题!
解决方案
推荐阅读
- ios - Xamarin iOS 返回主按钮未显示在详细视图中
- lua - lua中的大写和小写字符
- windows - 可以解析文件夹位置以查找 BATCH 中某些字符的实例吗?
- c++ - boost directory_iterator 是否在 Windows 上按字母顺序访问文件和文件夹
- python - 如何将列表中的字符串转换为列表,从 [[list1],[list2]....[listm]]
- angularjs - 如何在 AngularJS 页面中捕获 nodejs api 数据?
- drupal - 使用来自参考字段的动态参数过滤实体参考视图
- android - 将屏幕截图保存到内部存储并同步到图库?
- angular - Angular 工作区交互
- sql - SQL 列出具有前任的客户经理