我正在利用Zend Framework 2 Zend \ Authentication \ Adapter \ Ldap对Windows Active Directory进行身份验证。当我不尝试使用SSL时,这一切都很完美。使用SSL我发现以下错误:
0x51(无法联系LDAP服务器;错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败(无法获得本地颁发者证书)):
我怀疑这是因为我们使用自签名证书。我想绕过证书检查。使用标准的php ldap_set_option我可以将TLS_REQCERT设置为never。我无法在Zend身份验证适配器提供的ldap选项中找到如何设置此属性。我在文档中错过了一个配置设置吗?
有没有人知道如何设置REQCERT =永远不会在ZF2内?
答案 0 :(得分:1)
我必须注意,这不能成为不验证证书的借口,但是为了测试在Apache / PHP上运行的ZF2和LDAP,或者在命令行上运行,以防你在这里开发是答案。
我相信您可以在“httpd.conf”中为Apache全局放置,在“VirtualHost”配置中为每个网站放置,或者更具体地在本地“.htaccess”文件夹中放置。如果您需要了解这些文件之间的差异,我可以进一步提供帮助,但是现在知道如何为您的特定ZF2应用程序配置VirtualHost配置将非常有用,因此这并不适用于您正在开发的每个站点。
确保已启用Apache中的 mod_env 模块。
在ZF2应用的VirtualHost下添加:
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com
# The following allows for not requiring the certificate when developing between LDAP and AD SSL.
SetEnv LDAPTLS_REQCERT never
# Other directives here for your ZF2/PHP LDAP based site
</VirtualHost>
请务必重启Apache!有关更多环境信息,请参阅http://httpd.apache.org/docs/current/mod/mod_env.html。
当您从命令行(在bash shell中)运行PHP时,要测试您的ZF2站点,请转到公用文件夹并运行以下命令进行开发:
cd [path_to_ZF2_development_directory_without_brackets]/public
// sets the environment variable for this session only
LDAPTLS_REQCERT=never
// Runs PHP 5 's built in non-production Web server on the folder; listening on port 80 from all available sources.
php -S 0.0.0.0:1080 -t ./
因此,在我的示例中,我将(cd)转到我的zf2-application / public文件夹并运行其他2个其他命令。
总之,这些建议可以解决错误,但现在您必须处理在代码或Active Directory中需要修复的任何其他LDAP到Active Directory问题。
答案 1 :(得分:0)
在通过SSL连接时,客户端默认情况下会验证服务器证书 - 禁用此功能的一种方法是在LDAP的TLS_REQCERT never
文件中设置ldap.conf
并重新启动Apache。
如果你真的关心服务器的证书,你应该在网络服务器上放置一个证书。