【发布时间】:2011-04-21 10:51:18
【问题描述】:
我正在尝试使用 PHP 绑定到 LDAP 服务器。这是一个相当简单的过程,除了我无法解决我遇到的证书错误。我的身份验证凭据很好,因为我可以使用 Apache Directory Studio 连接到服务器。有没有办法自动接受服务器证书?类似于您在 Apache directory studio 中单击“接受此证书..”的方式?我知道这不是很好的安全性,但我只需要在这一点上让它工作,然后可以解决证书问题。
谢谢
【问题讨论】:
我正在尝试使用 PHP 绑定到 LDAP 服务器。这是一个相当简单的过程,除了我无法解决我遇到的证书错误。我的身份验证凭据很好,因为我可以使用 Apache Directory Studio 连接到服务器。有没有办法自动接受服务器证书?类似于您在 Apache directory studio 中单击“接受此证书..”的方式?我知道这不是很好的安全性,但我只需要在这一点上让它工作,然后可以解决证书问题。
谢谢
【问题讨论】:
你没有指定环境,所以这里是答案(在本网站的其他地方找到:How do I solve ldap_start_tls() "Unable to start TLS: Connect error" in PHP?):
Linux:在客户端机器(PHP Web 服务器)上修改系统正在使用的 ldap.conf 文件,在 RH/Fedora 中你想要的文件是 /etc/openldap/ldap.conf(不是 /etc/ldap.conf,那是为了系统认证...) .添加/修改以下行:
TLS_REQCERT never
Windows:添加系统环境变量,如下所示:
LDAPTLS_REQCERT=never
或者在您的 PHP 代码中,在 ldap_connect 之前,放置以下内容:
putenv('LDAPTLS_REQCERT=never');
这些将确保客户端 Web 服务器 PHP 实例永远不会检查服务器的 FQDN 与证书的 CN(通用名称)。在使用虚拟 IP 和证书的集群环境中非常有用。但由于这也使得 Web 服务器机器上整个操作系统中的其他工具/应用程序也不会检查这一点,请确保您的环境允许此更改(高安全性环境可能不允许这样做)。
【讨论】:
ldap.conf 路径是 /usr/local/etc/openldap/ldap.conf (即使操作系统 openldap 配置确实存在于 /etc/openldap 上)
putenv('LDAPTLS_REQCERT=never');,但它对我不起作用。我必须创建C:\OpenLDAP\sysconf\ldap.conf 文件并将TLS_REQCERT never 添加到其中。 This 帮助我知道将 conf 文件放在哪里。
使用网络浏览器,指向 ldaps://ipaddress/
当证书弹出框出现时,查看证书,查看证书链,找到受信任的根(不是正在使用的特定证书,而是签署它的父级)然后导出该证书。以 PEM 和 B64 格式保存。 (二进制和 B64 编码)。
然后使用它来将其转换为 PHP 密钥库格式,无论是哪种格式。 Java 密钥库很简单。不确定 PHP 使用什么。
【讨论】: