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



我正在尝试将我的应用程序配置为使用 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是理想的)

著名的InstallCert程序的新版本现在支持多种协议的STARTTLS,包括LDAP。

只需像这样运行它:

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

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

欢迎您访问我的博客页面 另一个 InstallCert for Java,现在支持 STARTTLS 下载和说明。

  1. 按照 Javadoc 中的说明,使用顶部的示例代码进行连接。

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

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

我们已经记录了一些不同的方法。

是的,上次我看的 openSSL 仍然无法使用 LDAP ptotocol for starttls 选项。它应该是这样的:

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

最新更新