python: 通过 kerberos 绑定到 ldaps 端口。

问题描述 投票:0回答:1

我可以使用ldap端口和SASL(使用gssapi做kerberos)连接到活动目录服务器,如下所示。

import ldap, ldap.sasl, sys

server    = 'ldap://server.domain.tld'
sasl_auth = ldap.sasl.sasl({} ,'GSSAPI')
conn      = ldap.initialize(server, trace_level=0)

conn.set_option(ldap.OPT_REFERRALS,0)  # for AD servers, don't chase referrals via anonymous bind
conn.protocol_version = ldap.VERSION3  # Set protocol version to LDAPv3 to enable SASL bind!

conn.sasl_interactive_bind_s("", sasl_auth)

所有这些都能正常工作 (为了简洁起见,没有进行错误检查。)但是如果我想通过将服务器字符串改为SSL端口来连接。

server    = 'ldaps://server.domain.tld'

绑定成功了,但我的连接被报告为关闭,当我试图做下一步的时候,比如:

print('Result of Who Am I? ext. op:',repr(conn.whoami_s()))

我得到的结果是:

ldap.SERVER_DOWN: {'desc': "Can't contact LDAP server", 'errno': 5, 'info': 'Input/output error'}

即使绑定没有引发任何异常。 "ldap:/"工作。 "ldaps:/"不工作。

这是否只能通过常规端口+TLS工作,还是我在做kerberos时漏掉了ldaps端口所需的某些部分的咒语?

谢谢。

python ldap kerberos sasl gssapi
1个回答
0
投票

我想我找到了自己问题的答案。

如果你检查一下这个链接。https:/docs.microsoft.comen-usopenspecswindows_protocolsms-adts989e0748-0953-455d-9d37-d08dfbf3998b。

你发现以下文字。

虽然活动目录允许在SSLTLS保护的连接上执行SASL绑定,但它不允许在这样的连接上使用SASL层加密完整性验证机制。

所以我想我的问题的答案是,因为python-ldap模块做的是加密完整性验证,而不是单纯的验证,所以你不能同时做SASL和SSLTLS。 所以你不能在 "ldap "端口上同时做start-tls,也不能连接到 "ldaps"(SSL)端口并使用SASL。

© www.soinside.com 2019 - 2024. All rights reserved.