具有相同配置的两个服务器 - ldap_bind在一个上工作,在另一个上失败

时间:2014-01-07 21:03:40

标签: php ssl openssl ldap

我刚推出了一个开发服务器,其配置与生产相同(CentOS 6.5,同样的AMP堆栈)。过去,我必须在同一台机器上运行开发实例(在不同的基于IP的虚拟主机下)。 ldap_bind在旧的monobox设置中完美运行。

我有单独的ssl crt文件用于制作和开发(prod& dev)。在设置新机器(使用puppet - 与生产相同的配置)之后,我复制了开发crt文件并确保加载了apache配置。与以前一样,使用相同的IP地址进行开发。

当我尝试在开发系统上对ldap进行身份验证时,我收到以下错误:

  

PHP警告:ldap_bind()[function.ldap-bind]:无法绑定到服务器:无法联系第1234行/some/path/function/functions_security.php中的LDAP服务器,引用:{{3} }

somescript.php的第1234行是

  

$ r = ldap_bind($ ldap_conn,$ srvc_dn,$ srvc_pass);

无需发布参数,因为它们在生产和开发系统之间相同。生产完美无缺。

我已经确认开发计算机上没有防火墙或网络问题,在提供的端口下远程登录到ldap服务器。我能够很好地连接。

网络操作人员说请求失败的原因是因为我没有在开发系统上“将证书导入到商店”。我用谷歌搜索了一下,但也许我没有使用正确的关键字 - 我没有找到如何检查我的开发“密钥库”中的证书。

我看到了keytool的一些文档,它可以列出.jks文件中的证书 - 但我在生产或开发系统上找不到.jks文件。

一些潜在客户/搜索关键字/建议会非常有用,因为我目前卡住了。

3 个答案:

答案 0 :(得分:0)

我相信证书存储在/etc/pki/tls/certs/的CentOS上。您可以将开发机器上的内容与生产机器上的内容进行比较

答案 1 :(得分:0)

从安装了openssl的任何机器(我猜你的两台机器都有),试试openssl s_client -connect myserver:ldaps。使用您的服务器名称替换myserver,如果不是标准,则使用端口ldaps(636)。按 CTRL + C 并在命令后滚动回。你应该看到像

这样的东西
CONNECTED(00000003)
depth=2 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
verify return:1
depth=1 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
verify return:1
depth=0 /description=zACEv54DP1HaZ8cR/C=DE/CN=XXXX.xxxx.xxxx.com/emailAddress=webmaster@xxxxxxx.com
verify return:1
---
Certificate chain
 0 s:/description=zACEv54DP1HaZ8cR/C=DE/CN=xxxx.xxxx.xxxx.com/emailAddress=webmaster@xxxxxxx.com
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
 1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
 2 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---

您的CA将有所不同,但此示例显示了包含服务器上安装的CA证书的证书。检查prod和dev之间是否存在prod / dev crt文件无法解释的差异,或者是否存在应该存在的差异(CN = xxxx.xxx部分)。这可能会帮助您找出证书的错误。或者,如果您没有在其中一台服务器上获得CONNECTED(00000003),那么ldap就不会在那里运行。

另一件事:你说I copied over the development crt files。你也复制了钥匙吗?复制文件后是否重启了ldap服务器?

答案 2 :(得分:0)

我必须做两件事才能让它发挥作用。

1)将我的服务器证书复制到TLS_CACERTDIR中的/etc/openldap/ldap.conf

2)在/usr/sbin/cacertdir_rehash上跑TLS_CACERTDIR。由于我使用的是CentOS 6,因此这一步显然非常重要。

在此之后,LDAP使用ldapsearch和PHP的ldap_bind