我已经安装了 Samba4.9.5-Debian和活动目录作用Debian 10. 安装配置为SAMBA_INTERNALDNS 后端。当我尝试使用 ldp.exe 将域连接的 Windows 10 笔记本电脑连接到 LDAPS 时,出现以下错误。解密的 389 工作正常。
ld = ldap_sslinit("smb-dc01", 636, 1);
Error 0 = ldap_set_option(hLdap, LDAP_OPT_PROTOCOL_VERSION, 3);
Error 81 = ldap_connect(hLdap, NULL);
Server error: <empty>
Error <0x51>: Fail to connect to smb-dc01.
ldp.exe 中的设置:
Connect ->
Server: smb-dc01
Port: 636
SSL: checked
尝试将 LDAP 与已加入域的计算机连接时,DC 日志/var/log/samba/log.samba显示:
[2020/04/02 17:41:11.671421, 3] ../lib/ldb-samba/ldb_wrap.c:332(ldb_wrap_connect)
ldb_wrap open of secrets.ldb
[2020/04/02 17:41:11.695211, 3] ../source4/smbd/service_stream.c:67(stream_terminate_connection) stream_terminate_connection: Terminating connection - 'ldapsrv_accept_tls_loop: tstream_tls_accept_recv() - 32:Broken pipe'
如果我将以下行添加到 Windows 10 机器的主办方文件,则机器将连接到 LDAPS。
192.168.23.54 smb-dc01
我不确定配置出了什么问题。未加入域机器使用相同的设置。这似乎很奇怪未加入域机器比已加入域。
Samba DC 上的配置文件:
/etc/samba/smb.conf
# Global parameters
[global]
dns forwarder = 192.168.23.5
netbios name = SMB-DC01
realm = DM.EXAMPLE.COM
server role = active directory domain controller
workgroup = DM
idmap_ldb:use rfc2307 = yes
tls enabled = yes
tls keyfile = tls/smb-dc01.key
tls certfile = tls/smb-dc01-server.cer
tls cafile = tls/root-ca.cer
# Debugging / logging
# https://serverfault.com/questions/389166/how-to-debug-samba-authorization-authentication-procedure
log level = 3
[netlogon]
path = /var/lib/samba/sysvol/dm.example.com/scripts
read only = No
[sysvol]
path = /var/lib/samba/sysvol
read only = No
/etc/resolv.conf
domain dm.example.com
search dm.example.com
nameserver 192.168.23.54
/etc/krb5.conf
[libdefaults]
default_realm = DM.EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
/etc/hosts
127.0.0.1 localhost
192.168.23.54 smb-dc01.dm.example.com smb-dc01
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
使用未加入域的 Windows 10 计算机进行测试
我使用两台不同的 Windows 10 机器进行了测试,一台加入了另一个域,另一台没有任何域。当 DNS 设置为指向 Samba DC 时,连接到 LDAPS 效果很好。
日志/var/log/samba/log.samba成功连接/断开连接:
# Connect
[2020/04/02 17:38:17.646796, 3] ../lib/ldb-samba/ldb_wrap.c:332(ldb_wrap_connect)
ldb_wrap open of secrets.ldb
# Disconnect
[2020/04/02 17:39:42.623855, 2] ../source4/dsdb/kcc/kcc_periodic.c:785(kccsrv_samba_kcc)
Calling samba_kcc script
[2020/04/02 17:39:42.825060, 0] ../lib/util/util_runcmd.c:327(samba_runcmd_io_handler)
/usr/sbin/samba_kcc: ldb_wrap open of secrets.ldb
[2020/04/02 17:39:43.090504, 3] ../lib/util/util_runcmd.c:291(samba_runcmd_io_handler)
samba_runcmd_io_handler: Child /usr/sbin/samba_kcc exited 0
[2020/04/02 17:39:43.090585, 3] ../source4/dsdb/kcc/kcc_periodic.c:770(samba_kcc_done)
Completed samba_kcc OK
[2020/04/02 17:39:44.216277, 3] ../source4/smbd/service_stream.c:67(stream_terminate_connection)
stream_terminate_connection: Terminating connection - 'ldapsrv_call_wait_done: call->wait_recv() - NT_STATUS_LOCAL_DISCONNECT'
答案1
写一个结构良好的问题有助于自己的思考。我发现需要将完整的 FQDN 添加到主题替代名称在OpenSSL生成证书签名请求之前的配置。
在下面的配置中DNS.2 = smb-dc01.dm.example.com已添加。
smb-dc01-openssl.conf
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C=AT
ST=Wien
L=Wien
O=DM
OU=IT
[email protected]
CN = smb-dc01.dm.example.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = smb-dc01
DNS.2 = smb-dc01.dm.example.com
DNS.3 = smb-dc01.dm
DNS.4 = smb-dc01.example
DNS.5 = smb-dc01.example.com
我使用此命令来生成密钥和证书签名请求:
openssl req -out "smb-dc01.csr" -newkey rsa:2048 -nodes -keyout "smb-dc01.key" -config "smb-dc01-openssl.conf"
我正在使用 Win 2012 R2 服务器上签名/生成证书证书颁发机构服务安装后,使用模板 Web 服务器,因为它具有服务器身份验证 (1.3.6.1.5.5.7.3.1) 对象标识符 (也称为 OID)。
文档https://support.microsoft.com/en-us/help/321051/how-to-enable-ldap-over-ssl-with-a-third-party-certification-authority规定 FQDN 必须在 CN 或主题备用名称中,但似乎 Samba AD DC 4.9.5 也要求主题备用名称中存在 FQDN。
更新:
- 这个问题也提到了 OpenSSL 手册经过伊凡·里斯蒂克。
警告
当证书包含备用名称时,所有常用名称都会被忽略。CA 颁发的较新证书甚至可能不包含任何常用名称。因此,请在备用名称列表中包含所有所需主机名。