在Linux重新启动后,什么东西都搞砸了? 非常奇怪的问题:LDAPS只有在重新启动后才能停止工作

我有一个设置了LDAPS(openldap)的Centos 6.3虚拟机虚拟机快照。 我已经在几天前根据不同来源的提示设置了它,然后写下了所有内容。 但是,当我试图重复安装(按照我自己的指示),我没有这样做:SSL握手被丢弃,就好像服务器完全configuration了错误的SSL证书。 它看起来像是如果我指出服务器configuration到不存在的证书文件。 我在本地运行所有检查(使用ldapsearch和“openssl s_client”)。 更糟糕的是,在我的快照中,LDAPS在重启后会停止同样的问题。 在不重启的情况下重启slapd / nslcd / nscd服务不会中断0_o将同一虚拟机的准确configuration和证书复制到同一虚拟机的快照(无LDAPS设置)并不起作用。 这就是为什么这个问题似乎与configuration和证书无关。 我花了超过10个小时的时间,但仍然有一个强烈的愿望去了解原因。

我明白为什么这个问题只在重新启动才会发生而不是在服务重新启动之后。 当Linux主机重新启动时,请随时发布重置为默认/粉碎/混乱的任何想法。 换句话说,在VM快照中捕获的单独服务的范围内,系统重新启动可能与服务重新启动有何不同?

我已经检查过了:

  • 当然,logs / netstat / ps
  • 一个tmp目录(每次重新启动都会清除,但不包含任何相关文件)
  • 环境variables
  • date(在快照中,date是错误的。修复date和重新启动服务不会中断LDAPS)
  • 主机名/ IP(我正在使用手动分配的IP为这个实例。在重新启动和恢复networking设置后,我尝试重新启动服务没有成功)
  • 服务参数和/ var / run目录下的slapd.args文件
  • 将垃圾写入服务的configuration文件并重新启动,以查看是否使用了该文件。
  • / etc / env / .bashrc / .bash_aliases文件没有被修改,不应该干涉。

也许SELinux是一个原因(也许它在快照被禁用,明天将在工作中检查)

还有其他build议吗? 今天打得太累太累了…

SSL连接失败通常是由于时间不同步造成的。 虚拟机倾向于这样做,因此请确保在所有虚拟机上运行ntpd,并且在ntpd启动之前启动时运行ntpdate。

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

对于将来通过googlefind这个答案的人来说,这里是一个确切的错误文本:

[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映像进行某些应用程序的QAtesting。 此应用程序在安装过程中禁用SELinux。 所以我在configurationopenldap期间禁用了SELinux,并且在将证书放置到/ certs文件夹时没有任何问题。

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