AWS环境PHP执行ldap_start_tls报TLS/SSL已生效错误如何解决
错误原因
- 核心原因是重复启用TLS加密:你使用
ldaps://协议+636端口连接LDAP服务器时,TCP连接建立阶段会自动完成TLS握手,全程链路都是加密的。但你实际运行的代码中额外调用了ldap_start_tls()函数(报错行26可验证),这个函数仅用于普通ldap://协议+389端口的连接升级TLS加密,在已经启用SSL的ldaps连接上调用就会触发「TLS or SSL already in effect」的报错。 - 次要可能原因:OpenLDAP客户端未正确配置证书读取路径,或证书权限不足,导致加密验证不通过。
解决步骤
- 删除多余的ldap_start_tls调用
直接删掉代码中第26行的ldap_start_tls()相关代码,不需要在ldaps连接上重复开启TLS。 - 校验OpenLDAP客户端配置
编辑/etc/openldap/ldap.conf文件,确认存在以下配置:
# 配置证书存放目录 TLS_CACERTDIR /etc/openldap/certs # 生产环境建议设置为demand强制校验证书合法性,测试环境可临时设为allow跳过校验 TLS_REQCERT demand
- 修正证书权限
执行以下命令保证证书可被PHP运行用户读取:
chmod 644 /etc/openldap/certs/*.pem chown root:root /etc/openldap/certs/*.pem
- 验证调整后的代码
你提供的现有连接代码无需其他修改,移除ldap_start_tls后即可正常运行,测试时可以去掉ldap_bind前的@错误抑制符,方便排查其他潜在问题。
内容的提问来源于stack exchange,提问作者Ravi Teja
相关产品推荐
相关产品推荐

