我们需要使用证书通过 tls 将 php 脚本连接到 LDAP。 LDAP 连接无需 tls 即可正常工作。更多详情请点击这里https://stackoverflow.com/questions/15260252/how-to-use-multiple-tls-certificates-for-ldap-from-php-zend
我们设法使用 Softerra LDAP 浏览器通过 tls 从 Windows 进行连接。它要求我们安装证书以及我们是否信任它。
我的最终结果是能够使用 php 中的 TLS 通过 LDAP 进行身份验证。我已获得 .cer 类型的证书。它来自 Windows Exchange 计算机。据我所知,SLES 支持 .pem 证书。所以我的问题是...
Q1:我需要从 .cer 转换为 .pem首先,我可以在客户端(即 SLES 服务器)上安装证书,最后Q2:在服务器上安装此证书的最佳方法是什么,以便我的 php 应用程序可以访问它并完成其工作。请注意,在 SLES 服务器上,我们需要连接到不同的 LDAP 服务器。
目前如果我们运行
ldapsearch -H ldaps://localhost:9215 -W
我们得到
Enter LDAP Password:
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (unable to get local issuer certificate)
我在这里找到了很多好信息http://www.php.net/manual/de/function.ldap-connect.php#36156尤其这句话在我眼里很重要Once you've gotten the ldapsearch tool working correctly PHP should work also.
- SUSE Linux Enterprise Server 11(x86_64)
- ldapsearch: @(#) $OpenLDAP: ldapsearch 2.4.26 (2012 年 9 月 26 日 13:14:42) $ abuild@baur:/usr/src/packages/BUILD/openldap-2.4.26/clients/tools (LDAP 库: OpenLDAP 20426)
答案1
这意味着服务器上的证书已过期或无效。
至于解决方法,使用LDAPTLS_REQCERT
变量忽略证书,例如:
LDAPTLS_REQCERT=never ldapsearch -D "cn=drupal-test,ou=Services,dc=example,dc=com" -w my_pass -h ldap.example.com -b "ou=People,dc=example,dc=com" -s sub -x -ZZ "(uid=admin)"
否则,您可以导入证书并将其标记为受信任。
答案2
我不确定从 pem 到 cer 的转换,但要使 ldapsearch 使用不具有 ldap.conf 的证书或不具有修改全局证书的权限,您应该能够执行以下操作:
env LDAPTLS_CACERT=/path/to/cert ldapsearch
答案3
使用
LDAPTLS_REQCERT=never
删除 LDAP 服务器的证书验证。这首先使 TLS 提供的安全性失效。不要这样做。如果存在问题,您应该修复证书,然后向 LDAP 客户端提供证书颁发机构,如 Tink 中所述。