目标:让域控中的 AD 用户可以直接登录 JumpServer。


一、环境说明

1. 关键节点

  • JumpServer: 192.168.1.40
  • 域控 DC: 192.168.1.122
  • 域控主机名: DC01
  • 域名: ad.yxwa.info
  • 域控 FQDN: DC01.ad.yxwa.info
  • Linux CA: 192.168.1.10
  • 内部 CA: step-ca
  • AD 用户:test
  • UPN: test@ad.yxwa.info

二、问题现象

最初 JumpServer 配置 LDAP 后,测试连接失败,后续排查发现分成三个阶段:

阶段 1:389 端口能通,但 simple bind 被拒绝

JumpServer 到域控网络可达:

ping -c 4 192.168.1.122
nc -zv 192.168.1.122 389

结果说明网络和 LDAP 端口没有问题。

但直接测试

ldapsearch -x -H ldap://192.168.1.122:389 \
-D "test@ad.yxwa.info" \
-w 'Demo123456!' \
-b "DC=ad,DC=yxwa,DC=info" \
"(sAMAccountName=zxy-test)"

报错:

ldap_bind: Strong(er) authentication required (8)

这说明域控启用了更严格的 LDAP 安全策略,不允许继续使用明文 simple bind,必须切到 LDAPS。

在较新的 AD 环境中,如果域控要求 LDAP 签名或完整性校验,普通 ldap://IP:389 的 simple bind 会被拒绝。
因此,正确方案不是继续调用户名密码,而是给域控部署一张可用于 LDAPS 的服务器证书,用 ldaps://FQDN:636 连接,让 JumpServer 信任内部 CA


三、为域控签发 LDAPS 证书

1. 在域控生成 CSR

在域控 DC01 上创建 C:\ldaps\request.inf:

[Version]
Signature="$Windows NT$"[NewRequest]
Subject = "CN=DC01.ad.yxwa.info"
KeySpec = 1
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
SMIME = FALSE
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1

生成请求文件:

certreq -new C:\ldaps\request.inf C:\ldaps\dc01_ldaps.req

2. 将 CSR 传到 Linux CA

例如用 SCP 传到 CA 服务器:

scp C:\ldaps\dc01_ldaps.req yxwa@192.168.1.10:/tmp/

3. 使用 step-ca 签发证书

在 CA 服务器上执行:

step certificate sign \
--bundle \
--password-file /opt/step/secrets/password.txt \
/tmp/dc01_ldaps.req \
/opt/step/certs/intermediate_ca.crt \
/opt/step/secrets/intermediate_ca_key \
> /tmp/dc01_ldaps.crt

这里的核心原理是:
用内部中间 CA 对域控的 CSR 进行签名,并把证书链一并输出

4. 将证书回传并安装到域控

把签好的证书传回 DC:

scp yxwa@192.168.1.10:/tmp/dc01_ldaps.crt C:\ldaps\

安装证书并与本机私钥关联:

certreq -accept C:\ldaps\dc01_ldaps.crt

然后重启域控,或至少重启 AD DS 服务:

shutdown /r /t 0

先看 636 端口

nc -zv 192.168.1.122 636

再看证书握手

openssl s_client -connect 192.168.1.122:636 -showcerts

如果看到类似结果:

subject=CN = DC01.ad.yxwa.info,Verify return code: 0 (ok) 说明域控已经开始正常提供 LDAPS 服务。

因为证书主题是 DC01.ad.yxwa.info,所以 LDAP 客户端连接时也要用这个名称:

ldapsearch -x -H ldaps://DC01.ad.yxwa.info:636 \
-D "zxy-test@ad.yxwa.info" \
-w 'Demo123456!' \
-b "DC=ad,DC=yxwa,DC=info" \
"(sAMAccountName=zxy-test)"

这一步成功后,就说明:AD 认证正常,LDAPS 正常证书,名称校验正常



四、让 JumpServer 信任内部 CA

先准备 CA 链

在 JumpServer 服务器上,把中间 CA 和根 CA 拼成一个文件:

cat /tmp/intermediate_ca.crt /tmp/root_ca.crt > /tmp/ldap_ca.pem

找到容器真实挂载目录

/opt/jumpserver/config/certs -> /opt/jumpserver/data/certs

把文件放到宿主机挂载目录:

cp /tmp/ldap_ca.pem /opt/jumpserver/config/certs/ldap_ca.pem

重启 JumpServer

jmsctl restart

重启后确认容器内存在该文件:

docker exec -it jms_core ls -l /opt/jumpserver/data/certs

看到 ldap_ca.pem 即表示生效。


最终验证

完成后,在 JumpServer 页面再次执行:

最终测试用户认证成功,且可以首次登录 JumpServer,进入个人信息完善页面,说明整个链路已经打通:

AD 用户 → LDAPS → JumpServer 认证 → 首次登录


此作者没有提供个人介绍。
最后更新于 2026-05-12