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

Java 如何使用StartTLS获取LDAP服务器的SSL证书?,java,ssl,ldap,Java,Ssl,Ldap,为了安全起见,我正在尝试将我的应用程序配置为访问仅在端口389上侦听的LDAP服务器。我希望获得SSL证书的副本,以便将其指定为已知证书(在jssecacerts文件中,因为我的应用程序是用Java编写的) 如果它在端口636上运行,我会像这样使用openssl: openssl s_client -host myhost -port 636 并从输出中获取证书 我的第一个想法是尝试使用: openssl s_client -host myhost -port 389 -starttls ..

为了安全起见,我正在尝试将我的应用程序配置为访问仅在端口389上侦听的LDAP服务器。我希望获得SSL证书的副本,以便将其指定为已知证书(在jssecacerts文件中,因为我的应用程序是用Java编写的)

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

openssl s_client -host myhost -port 636
并从输出中获取证书

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

openssl s_client -host myhost -port 389 -starttls ...
但它不支持starttls的LDAP版本

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

ldapsearch -ZZ -h myhost -d99 ...
我可以看到在线数据包括证书,但它不是我知道如何使用的形式

有没有一种简单的方法可以通过命令行工具或短程序获得证书?(我并不特别关心哪种语言,但Java将是理想的语言)

  • 使用顶部的示例代码,按照中所述进行连接

  • 这将为您提供
    SSLSession,
    ,从中可以获得对等证书链,从中可以获得对等证书的
    X509Certificate
    ,作为元素零

  • 然后,使用
    Certificate.getEncoded()
    byte[]
    数组的形式获取证书,将其保存到需要的任何位置。或者,您可以将其直接添加到新的或旧的
    密钥库
    对象中并保存

  • 我们已经记录了

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

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

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

    就这样运行它:

    java -jar installcert-usn-20131123.jar host_name:389
    
    它会将证书保存在JRE文件树中的
    jssecacerts
    keystore文件中,以及当前目录中的
    extracerts
    keystore文件中。然后可以使用Java将证书导出为其他格式


    欢迎您访问我的博客页面以获取下载和说明。

    现在,命令
    openssl s_客户端-showcerts-connect ldap.hostname.domain.ext:636
    适用于我的openssl版本
    1.0.1e-fips 2013年2月11日
    (来自我的CentOS)。就像链接页面中解释的那样。