ejabberd:如何使用“ ldap_tls_certfile”

问题描述

根据ejabberd docs,您可以使用 ldap_tls_certfile 来验证与LDAP服务器的TLS连接。但是,这里需要哪个证书?

引用文档:

包含PEM编码证书和PEM的文件的路径 编码的私钥。该证书将由ejabberd提供 为LDAP连接启用TLS时。没有认值, 这意味着将不发送客户端证书。

Sooo ....我试图使用一个串联的PEM文件,该文件首先包含ejabberd服务器的主机证书,然后包含主机密钥。但这会导致以下错误

@eldap:connect_bind:1073 LDAP连接到 ldap1.example.com:636失败:收到客户端警报:致命-握手 失败-{bad_cert,hostname_check_Failed}

TLS客户端:状态为ssl_handshake.erl的证书:1372生成的客户端警报:致命-握手失败-{bad_cert,hostname_check_Failed}

这显然不是预期的。是LDAP服务器的公共证书吗?但是,那么,什么私钥是期望的?

在这里迷路了。有人介意帮我吗?

解决方法

免责声明:我从未使用过LDAP TLS。

查看ejabberd源代码,了解ejabberd选项ldap_tls_certfile的值 复制到eldap的选项tls_certfile中 https://github.com/processone/ejabberd/blob/e4d600729396a8539e48ac0cbd97ea1b210941cd/include/eldap.hrl#L72

然后将eldap的tls_certfile的值复制到ssl的选项certfile中 https://github.com/processone/ejabberd/blob/e4d600729396a8539e48ac0cbd97ea1b210941cd/src/eldap.erl#L580

该选项以及其他选项在调用ssl:connect / 4时作为参数提供 https://github.com/processone/ejabberd/blob/e4d600729396a8539e48ac0cbd97ea1b210941cd/src/eldap.erl#L1140

因此,您在ejabberd中设置的选项在ssl:connect中被命名为“ certfile”,您可以在此处查看其文档: https://erlang.org/doc/man/ssl.html#connect-4

在该页面中搜索证书文件,它显示以下说明:

Path to a file containing the user certificate on PEM format.

它是LDAP服务器的公共证书吗?

尝试一个并在此处评论。

但是,然后,期望使用什么私钥?

尝试不要放置任何私钥。无论如何,当创建LDAP证书时,它也会产生一个私钥文件。