Linux 重启后什么东西都乱了?非常奇怪的问题:LDAPS 仅在重启后停止工作

Linux 重启后什么东西都乱了?非常奇怪的问题:LDAPS 仅在重启后停止工作

我有一个 Centos 6.3 virtualbox VM 快照,其中设置了 LDAPS (openldap)。几天前,我按照不同来源的提示设置了它,之后记下了所有内容。但是,当我尝试重复安装(按照我自己的说明)时,却无法完成:SSL 握手被丢弃,好像服务器的 SSL 证书配置完全错误。这看起来像是我将服务器配置指向了不存在的证书文件。我正在本地运行所有检查(使用 ldapsearch 和“openssl s_client”)。更糟糕的是,我的快照中的 LDAPS 在重启后因同样的问题而停止工作。重新启动 slapd/nslcd/nscd 服务而不重新启动不会破坏它 0_o将精确的配置和证书复制到同一虚拟机的干净快照(未设置 LDAPS)和正确配置不起作用。这就是为什么问题似乎与配置和证书无关。我花了 10 多个小时进行挖掘,但仍然非常希望了解原因。

对我来说,了解为什么会发生此问题至关重要(具有教育意义)。仅在重启后而不是在服务重启后。请随意发布任何关于在 Linux 主机重启时重置为默认/崩溃/混乱的事情的想法。换句话说,在 VM 快照中捕获的单独服务范围内,系统重启与服务重启有何不同?

我已经检查过了:

  • 当然,logs/netstat/ps
  • tmp 目录(每次重启时都会清理,但不包含任何相关文件)
  • 环境变量
  • 日期(快照中的日期是错误的。修复日期并重新启动服务不会破坏 LDAPS)
  • 主机名/ip(我为该实例使用手动分配的 IP。重新启动并恢复网络设置后,我尝试重新启动服务,但没有成功)
  • /var/run 目录中的服务参数和 slapd.args 文件
  • 将垃圾写入服务的配置文件并重新启动它以查看是否确实使用了该文件。
  • /etc/env / .bashrc / .bash_aliases 文件尚未被修改,并且不会造成干扰。

也许 SELinux 是一个原因(也许它在快照时被禁用,明天上班时会检查它)

还有其他建议吗?今天太累了,无法继续战斗了……

答案1

SSL 连接失败通常是由于时间不同步造成的。虚拟机往往会出现这种情况,因此请确保在所有虚拟机上运行 ntpd,并且在 ntpd 启动之前在启动时运行 ntpdate。

答案2

该问题实际上是由 SELinux 以一种复杂的方式引起的。

对于将来通过谷歌找到这个答案的人来说,这里有一个确切的错误文本:

[root@va21 ~]# ldapsearch -d 1 -v -x -H ldaps://localhost:636
ldap_url_parse_ext(ldaps://localhost:636)
ldap_initialize( ldaps://localhost:636/??base )
ldap_create
ldap_url_parse_ext(ldaps://localhost:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP localhost:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 127.0.0.1:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap/certs' tokenDescription='ldap(0)'                 certPrefix='' keyPrefix='' flags=readOnly
TLS: using moznss security dir /etc/openldap/certs prefix .
TLS: error: tlsm_PR_Recv returned 0 - error 21:Is a directory
TLS: error: connect - force handshake failure: errno 21 - moznss error -5938
TLS: can't connect: TLS error -5938:Encountered end of file.
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

和 openssl s_client 输出:

[root@va21 ~]# openssl s_client -connect localhost:636 -showcerts
CONNECTED(00000003)
140066435413832:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake     failure:s23_lib.c:184:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 113 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

它的意思是(应该是这个意思!)当 slapd 服务器启动时,ssl 证书不可用/不可读/不可访问/无效。

我正在准备 VM 映像以对某个应用程序进行 QA 测试。此应用程序在安装期间禁用了 SELinux。因此,我在配置 openldap 期间禁用了 SELinux,将证书放入 /certs 文件夹时没有出现任何问题。

当我必须将具有相同配置的 openldap 部署到干净的 VM 或重新启动现有 VM 时,我遇到了麻烦。这里启用了 SELinux,它阻止 slapd 从不允许的地方读取证书。服务日志或输出不包含任何关于权限拒绝的明确投诉。我应该将证书放在 /etc/ssl/certs/ 和 /etc/openldap/certs 的某个地方才能使其正常工作。

相关内容