如何使用证书通过 tls 使 ldapsearch 在 SLES 上工作?

Rad*_*dek 14 ldap sles certificates tls

我们需要使用证书通过 tls 将我们的 php 脚本连接到 LDAP。LDAP 连接在没有 tls 的情况下运行良好。更多细节在这里/sf/ask/1068217671/

我们设法使用 Softerra LDAP 浏览器从 Windows 通过 tls 进行连接。它要求我们安装证书以及我们是否信任它。

我的最终结果是能够使用来自 php 的 TLS 对 LDAP 进行身份验证。我已获得 .cer 类型的证书。它来自 Windows Exchange 机器。据我所知,SLES 支持 .pem 证书。所以我的问题是...

Q1:我是否需要先从 .cer 转换为 .pem,然后才能在客户端(SLES 服务器)上安装证书,最后Q2:在服务器上安装此证书的最佳方法是什么,以便我的 php 应用程序可以访问它并完成它的工作。请注意,在 SLES 服务器上,我们需要连接到不同的 LDAP 服务器。

目前如果我们跑

ldapsearch -H ldaps://localhost:9215 -W
Run Code Online (Sandbox Code Playgroud)

我们得到

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)
Run Code Online (Sandbox Code Playgroud)

我在这里找到了很多很好的信息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 (Sep 26 2012 13:14:42) $ abuild@baur:/usr/src/packages/BUILD/openldap-2.4.26/clients/tools(LDAP 库: OpenLDAP 20426)

ken*_*orb 32

这意味着服务器上的证书已过期或无效。

至于解决方法,使用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)"
Run Code Online (Sandbox Code Playgroud)

否则,您可以导入证书并将其标记为受信任。


tin*_*ink 12

我不确定从 pem 到 cer 的转换,但是要使 ldapsearch 使用证书,而没有 ldap.conf 或没有修改全局证书的权限,您应该能够这样做:

env LDAPTLS_CACERT=/path/to/cert ldapsearch
Run Code Online (Sandbox Code Playgroud)


小智 5

使用

LDAPTLS_REQCERT=never
Run Code Online (Sandbox Code Playgroud)

删除 LDAP 服务器的证书验证。这首先使 TLS 提供的安全性失效。不要这样做。如果存在问题,您应该修复证书,然后向 LDAP 客户端提供证书颁发机构,如 Tink 中所述。