php - LDAP 认证 - ldap_bind() 方法很慢
问题描述
我的应用程序对用户进行了 ldap 身份验证。
当我验证它需要很长时间才能完成大约 10 到 15 秒。如果我立即注销并再次登录。它只需要 100 毫秒或非常慢的时间。一段时间后,当我再次尝试登录时,它再次需要 10-15 秒。
当我们从我的个人 Windows 机器连接时,它非常快,但从我们的网络服务器机器上需要时间。
这个问题背后的原因可能是什么?
下面是我的代码,它成功但需要时间才能完成。如果我再次刷新此页面,它会立即发生。
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
//Our Ip address \/
$l = ldap_connect("ldap://1.2.3.4:389");
ldap_set_option($l, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($l, LDAP_OPT_REFERRALS, 0);
//This takes very long time.
ldap_bind($l, "CN=work,OU=XX-ALL,DC=Example,DC=com", "workPassword");
echo(ldap_error($l)."\n");
解决方案
值得一提的是您使用的是什么 LDAP 服务器。如果您使用的是 Windows AD/LDAP,这可能很有用:
Windows 尝试从其自己的服务器和第三方服务器检索新的 CRL(证书吊销列表)。这看起来正好在 15 秒内超时。如果机器被隔离或无法通过 Internet 访问这些资源(被阻止/防火墙、连接速度慢等),则可能会出现这种情况。
如果您的 CA/证书已经在网络服务器上可用,您可以尝试降低超时时间以查看它是否解决了问题?
我们只需要在服务器上执行以下步骤:
启动 gpedit.msc -> 本地计算机策略 -> 计算机配置 -> 管理模板 -> 系统 -> Internet 通信管理 -> Internet 通信设置 -> 关闭自动根证书更新 = 已启用
启动 gpedit.msc -> 本地计算机策略 -> 计算机配置 -> Windows 设置 -> 安全设置 -> 公钥策略 -> 证书路径验证路径。选择选项卡“网络检索”并启用“定义这些策略设置”。取消选择“自动更新根...”。最重要的是将超时值设置为 1。
推荐阅读
- python - 我们如何使用 DATETIME(python) 将日期转换为特定格式?
- c# - 当我 Moq Confluent.Kafka.WatermarkOffsets 时无法设置值
- html - 流式传输 HTML 画布内容的最简单方法是什么
- javascript - 即使我的朋友有烫发,您也不允许使用该命令
- python - 如何在silenium中获取下一页?
- firebase - 在应用启动时发出 Firestore 请求并保存 (Flutter)
- r - 将数据集导出到 xslx 并包含过滤器
- powershell - 如何将项目属性与字符串值进行比较
- mysql - MYSQL - LOAD DATA INFILE 给出 ERROR 1045 (28000): Access denied for user '
'@' '(使用密码:是) - python - 如何使用硒滚动特定的滚动条?