目标:让域控中的 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 认证 → 首次登录


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