使用 389 Directory Server 设置 SSL 以进行 LDAP 身份验证

Gio*_*Mac 7 ssl fedora ldap authentication 389-ds

我在 RHEL 5 上运行了 389 Directory Server,其中包含组、用户、posix 等。RHEL 客户端正在使用 LDAP 对用户进行身份验证 - 没问题,一切正常,但密码以纯文本形式发送,并且可以通过网络嗅探器看到。因此,决定使用 SSL 运行:

  1. 创建 CA - 获得私有和公共 CA 证书
  2. 使用 CA 证书:根据 389DS 证书请求为 389DS生成私有和公共证书并合并(第一个文件),从图形控制台(第二个文件)与 CA 公共证书一起导入到 389DS 。
  3. 在 389DS 中启用 SSL
  4. 在客户端,使用 authconfig-gtk 为 LDAP 启用 SSL,指定CA 公共证书

不起作用。

如何?安全集成的最佳方法是什么?

Uni*_*426 8

您可能想要做的第一件事是检查您的服务器是否正确提供了证书。您可以通过尝试使用 OpenSSL 连接到您的服务器来做到这一点。在具有访问权限的客户端计算机上,运行:

openssl s_client –connect target_server_fqdn:636
Run Code Online (Sandbox Code Playgroud)

这应该返回一个很好的服务器证书打印出来。这里的关键是检查最后打印的“验证返回码”。您可能会得到不同的代码,但一般来说,对于有效证书,您应该得到 0,如果您是自签名,则可能会得到 19。

如果失败,请返回并检查以确保您已正确导入服务器端证书。

如果您已通过此测试,请继续从客户端测试您的 TLS 连接。

在客户端机器上,运行

ldapsearch -z -ZZ '(uid=<testusername>)'
Run Code Online (Sandbox Code Playgroud)

这将强制通过加密连接进行 LDAP 查找。如果成功,您应该获取一些用户信息,并且检查 DS 日志应该会产生以下内容:

[23/Sep/2011:07:48:57-0500] conn=1631 op=0 EXT oid="XXXXXX.X.XX" name="startTLS" [23/Sep/2011:07:48:57 -0500 ] conn=1631 op=0 结果错误=0 tag=120 nentries=0 etime=0 [23/Sep/2011:07:48:57 -0500] conn=1631 SSL 256-bit AES

如果失败,您需要确保在客户端正确导入证书。

在进行故障排除时,我发现自己经常查看的一些常见区域是:

1.) 在客户端上,在某些情况下(这里有人可能能够更好地解释),您可能会尝试通过编辑 ldap.conf 并包括该行来要求签名

TLS_REQCERT allow
Run Code Online (Sandbox Code Playgroud)

2.) 如果身份验证 GUI 给您带来问题,您可以尝试使用 LDAP 显式打开 TLS

authconfig --enableldaptls --update 
Run Code Online (Sandbox Code Playgroud)

我以前在 GUI 上遇到过问题,所以我倾向于坚持使用 CLI 命令。

3.) 您可能会尝试的最后一件事(再次,仅用于测试)是调用

cacertdir_rehash <dir where certs are stored>
Run Code Online (Sandbox Code Playgroud)

更新

如果您在实际创建自签名证书时需要更多帮助,请尝试以下操作:

1.) 创建您自己的自签名 CA 证书:

certutil -S -n "<CA Certificate Name Here>" -s "cn=<CN Name Here>, dc=<Your DC's FQDN>" -2 -x -t "CT,," -m 1000 -v 120 -d . -k rsa
Run Code Online (Sandbox Code Playgroud)

2.) 为目录服务器创建服务器证书

certutil -S -n "Cert-Name" -s "cn=<Server FQDN>" -c "<Name of CA Certificate>" -t "u,u,u" -m 1001 -v 120 -d . -k rsa 
Run Code Online (Sandbox Code Playgroud)

3.) 将这两个证书导入到“管理证书”部分中的目录服务器中,在“任务”下选择

4.) 启用 TLS 加密

5.) 为客户端创建可导出的证书并将其输出到 .pem 文件

certutil -d . -L -n "<CA Certificate Name>" -a > cacert.pem
Run Code Online (Sandbox Code Playgroud)

6.) 通过您的选择 - 将客户端证书下载到每个客户端。

7.) 使用前面提到的命令重新散列证书

cacertdir_rehash <dir where certs are stored>
Run Code Online (Sandbox Code Playgroud)