php:7.4-apache/bullseye镜像下LDAP Bind操作TLS连接失败问题问询
Debian Bullseye 版本默认收紧了 OpenSSL 安全规则:全局最低 TLS 版本要求升级为 TLS 1.2,加密套件安全等级提升至 2 级,禁用了所有弱加密算法、长度不足 2048 位的 RSA 密钥。如果你的 LDAP 服务端仅支持 TLS 1.0/1.1 或者使用弱加密配置,就会出现 TLS 握手无明确错误码的失败情况,和你遇到的报错完全匹配。
你可以根据自己的场景选择以下任意一种方案修复:
方案1:调整系统全局 OpenSSL 配置(兼容性最好)
在 Dockerfile 中添加以下命令修改 OpenSSL 配置,兼容旧版本 TLS 协议和加密套件:RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1.0/' /etc/ssl/openssl.cnf \ && sed -i 's/CipherString = DEFAULT@SECLEVEL=2/CipherString = DEFAULT@SECLEVEL=1/' /etc/ssl/openssl.cnf如果你知道 LDAP 服务端最低支持的 TLS 版本,可将上述
TLSv1.0替换为对应版本(如TLSv1.1),安全系数更高。方案2:仅修改 LDAP 客户端配置(影响范围更小)
编辑容器内/etc/ldap/ldap.conf文件,添加以下配置:TLS_REQCERT demand TLS_CIPHER_SUITE NORMAL:@SECLEVEL=1如果你的 LDAP 服务端使用自签名证书,可将 CA 证书复制到容器的
/usr/local/share/ca-certificates/目录,执行update-ca-certificates命令导入信任即可。如果不需要校验证书有效性,也可以将TLS_REQCERT设为allow临时测试。方案3:代码层调整 LDAP 选项(临时测试用,不推荐生产使用)
在执行ldap_bind前添加以下代码调整 TLS 参数:// 配置TLS最低支持版本为1.0,对应数值0x301,TLS1.1为0x302,TLS1.2为0x303 ldap_set_option($ldapConnection, LDAP_OPT_X_TLS_PROTOCOL_MIN, 0x301); ldap_set_option($ldapConnection, LDAP_OPT_X_TLS_CIPHER_SUITE, 'NORMAL:@SECLEVEL=1');
以上方案修改后重启容器即可生效,不需要降级到 Buster 版本也能正常使用 LDAP TLS 连接。
内容的提问来源于stack exchange,提问作者zac

