我刚推出了一个开发服务器,其配置与生产相同(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文件。
一些潜在客户/搜索关键字/建议会非常有用,因为我目前卡住了。
答案 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
。