【问题标题】:How do I get the SSL certificate for an LDAP server using StartTLS?如何使用 StartTLS 获取 LDAP 服务器的 SSL 证书?
【发布时间】:2013-09-16 17:04:20
【问题描述】:

我正在尝试将我的应用程序配置为访问 LDAP 服务器,该服务器使用 StartTLS 扩展在端口 389 上侦听以确保安全。我想获取 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 会是理想的)

【问题讨论】:

    标签: java ssl ldap


    【解决方案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 进行下载和说明。

    【讨论】:

      【解决方案2】:
      1. 使用顶部的示例代码按照Javadoc 中的说明进行连接。

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

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

      【讨论】:

        【解决方案3】:

        我们记录了some of the different methods

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

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

        【讨论】:

        • 现在,命令 openssl s_client -showcerts -connect ldap.hostname.domain.ext:636 适用于我的 OpenSSL 版本 1.0.1e-fips 11 Feb 2013(来自我的 CentOS)。就像在您的链接页面中解释的那样。
        猜你喜欢
        • 2013-07-13
        • 2012-05-04
        • 1970-01-01
        • 2015-08-10
        • 2018-02-26
        • 2020-03-24
        • 1970-01-01
        • 2011-01-12
        • 2021-11-28
        相关资源
        最近更新 更多