我正在尝试将我的应用程序配置为使用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会是理想的)
答案 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)
使用顶部的示例代码按Javadoc中所述进行连接。
这将为您提供SSLSession,
,您可以从中获取对等证书链,从中可以将对等方的X509Certificate
作为元素零。
然后使用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