我正在尝试将我的应用程序配置为使用 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 下载和说明。
-
按照 Javadoc 中的说明,使用顶部的示例代码进行连接。
-
这为您提供了可以从中获取对等证书链的
SSLSession,
,从中可以获取对等方作为元素零的X509Certificate
。 -
然后将其保存在需要的任何位置,使用
Certificate.getEncoded()
将证书作为byte[]
数组获取。或者,您可以将其直接添加到新的或旧的KeyStore
对象并保存。
我们已经记录了一些不同的方法。
是的,上次我看的 openSSL 仍然无法使用 LDAP ptotocol for starttls 选项。它应该是这样的:
openssl s_client -connect remote.host:25 -starttls LDAP