如何使用StartTLS获取LDAP服务器的SSL证书?

时间:2013-09-16 17:04:21

标签: java ssl ldap

我正在尝试将我的应用程序配置为使用StartTLS扩展来访问端口389上仅侦听 的LDAP服务器以确保安全性。我想获得SSL证书的副本,以便我可以将其指定为已知证书(在jssecacerts文件中,因为我的应用程序是用Java编写的)。

如果它在端口636上运行,我会像这样使用openssl:

openssl s_client -host myhost -port 636

并从输出中获取证书。

我的第一个尝试是尝试使用:

openssl s_client -host myhost -port 389 -starttls ...

但这不支持LDAP版本的starttls。

然后,我尝试使用具有高调试级别的ldapsearch:

ldapsearch -ZZ -h myhost -d99 ...

我可以看到线上数据包含证书,但它不是我知道如何使用的形式。

是否有通过命令行工具或短程序获取证书的简便方法? (我并不特别关心哪种语言,但Java会是理想的)

3 个答案:

答案 0 :(得分:1)

众所周知的InstallCert程序的新版本现在支持多个协议的STARTTLS,包括LDAP。

就这样运行:

java -jar installcert-usn-20131123.jar host_name:389

它会将证书保存在JRE文件树的jssecacerts密钥库文件中,也会保存在当前目录的extracerts密钥库文件中。然后,您可以使用Java keytool将证书导出为其他格式。

欢迎您访问我的博客页面Yet another InstallCert for Java, now with STARTTLS support进行下载和说明。

答案 1 :(得分:0)

  1. 使用顶部的示例代码按Javadoc中所述进行连接。

  2. 这将为您提供SSLSession,,您可以从中获取对等证书链,从中可以将对等方的X509Certificate作为元素零。

  3. 然后使用Certificate.getEncoded()将证书保存为byte[]数组,然后将其保存到您需要的任何位置。或者您可以将其直接添加到新的或KeyStore对象中并保存。

答案 2 :(得分:0)

我们已记录some of the different methods

是的,openSSL上次我看起来STILL没有能力将LDAP ptotocol用于starttls选项。应该是这样的:

openssl s_client -connect remote.host:25 -starttls LDAP