为什么我的 389-ds 配置可以通过 LDAP 工作,但不能通过 LDAPS 工作?

为什么我的 389-ds 配置可以通过 LDAP 工作,但不能通过 LDAPS 工作?

抱歉,如果之前有人问过这个问题,但是当我搜索类似的问题时,我得到了如下结果这些(对我来说这毫无意义)。

我一直在尝试使用 Red Hat 的 Directory Server 11 文档在两台完全更新的 Rocky Linux 8.6 服务器上设置 389-ds。我的服务器是 supplier1.example.com 和 supplier2.example.com,它们位于同一子网中。我已使用每个服务器的私有 IP 和主机名设置了它们的 /etc/hosts 文件,并通过 ping 另一台服务器的 IP 和主机名验证了连接性。端口 389 和 636 已对 TCP 开放。共享的后缀是“dc=example,dc=com”。

目录服务器实例是使用 dscreate 的交互模式创建的(LDAP over TCP 389、LDAPS over TCP 636、自签名证书等)。我怀疑问题出在这些自签名证书上,以及两个系统之间缺乏信任,但我不知道如何开始纠正这个问题。

谢谢您阅读此篇。

使用下面的示例命令,我能够创建复制协议......

服务器 1:

sudo dsconf -D "cn=Directory Manager" ldap://supplier1.example.com replication \
    enable --suffix="dc=example,dc=com" --role="supplier" --replica-id=2 \
    --bind-dn="cn=replication manager,cn=config" --bind-passwd="password"

sudo dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt \
     create --suffix="dc=example,dc=com" --host="supplier2.example.com" --port=389 \
     --conn-protocol=LDAP --bind-dn="cn=replication manager,cn=config" \
     --bind-passwd="password" --bind-method=SIMPLE --init \
     example-agreement-supplier1-to-supplier2

服务器2:

dsconf -D "cn=Directory Manager" ldap://supplier2.example.com replication \
    enable --suffix="dc=example,dc=com" --role="supplier" --replica-id=1 \
    --bind-dn="cn=replication manager,cn=config" --bind-passwd="password"

sudo dsconf -D "cn=Directory Manager" ldap://supplier2.example.com repl-agmt \
     create --suffix="dc=example,dc=com" --host="supplier1.example.com" --port=389 \
     --conn-protocol=LDAP --bind-dn="cn=replication manager,cn=config" \
     --bind-passwd="password" --bind-method=SIMPLE --init \
     example-agreement-supplier2-to-supplier1

文档最初要求复制协议命令使用 636 上的 LDAPS,但当我尝试复制时,总是会失败。以下是运行

$ ldapsearch -x -b "cn=mapping tree,cn=config" -D "cn=Directory Manager" -w  password objectClass=nsDS5ReplicationAgreement -LL

...
nsds5replicaLastUpdateStatus: Error (-2) Problem connecting to replica - LDAP error: Local error (connection error)
nsds5replicaLastUpdateStatusJSON: {"state": "red", "ldap_rc": "-2", "ldap_rc_text": "Local error", "repl_rc": "16", "repl_rc_text": "connection error", "date": "2022-05-26T21:58:31Z", "message": "Error (-2) Problem connecting to replica - LDAP error: Local error (connection error)"}
nsds5replicaUpdateInProgress: FALSE
nsds5replicaLastInitStart: 20220526212655Z
nsds5replicaLastInitEnd: 19700101000000Z
nsds5replicaLastInitStatus: Error (-2) - LDAP error: Local error - no response received
nsds5replicaLastInitStatusJSON: {"state": "red", "ldap_rc": "-2", "ldap_rc_text": "Local error", "repl_rc": "255", "repl_rc_text": "no response received", "conn_rc": "0", "conn_rc_text": "operation success", "date": "2022-05-26T21:27:10Z", "message": "Error (-2) - LDAP error: Local error - no response received"}

答案1

我通过在 389-ds 之外生成新的自签名证书并使用以下命令将它们导入到每台服务器上,使复制能够通过 LDAPS 进行:

dsconf -D "cn=Directory Manager" ldap://host.domain.com security certificate add --file host_domain.com.crt --name "Server-Cert" --primary-cert

随后重新启动实例即可解决问题。

注意:除此之外,我对 389-ds 的经验很少,所以可能有更好的方法来做到这一点。

相关内容