目标:让域控中的 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
2. 测试账号
- 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 认证 → 首次登录
Comments NOTHING