ldaptor 框架 ProxyBase use_tls 属性似乎不起作用

问题描述

我正在使用 ldaptor ProxyBase 类(https://github.com/twisted/ldaptor/tree/master/ldaptor)来创建一个 ldap 代理。附上示例代码。 在 ldaps://localhost:10389 上收到的 ldapsearch 请求被代理到 ldaps://ad-server:636。

我可以确认以下事情:

  1. ad-server 具有 CA 签名证书。 (openssl s_client -connect :636 -showcerts) -> 返回 ca 签名证书。
  2. 将 ldap/ldaps 搜索请求直接发送到广告服务器。 (不涉及我的代理)。因此,广告服务器的行为符合预期。
  3. 在我的代理示例代码中,如果我将广告服务器端口设置为 389 并将 use_tls 设置为 False,则一切正常。
  4. 但是当我将广告服务器端口更改为 636 并将 use_tls 设置为 True 时,代理示例不起作用。 ldapsearch -d 9 似乎没有提供任何可调试的信息。如果需要,可以提供相同的。 我什至尝试设置reactor.connectSSL(下面的评论部分)并且只是抛出一个: 未处理的错误 回溯(最近一次调用最后一次): 失败:twisted.internet.error.ConnectionLost:与另一端的连接以非干净的方式丢失。

我知道 ProxyBase use_tls 会执行 startTLS 并且 reactor.connectSSL 会直接从 TLS 连接开始。我对任何一个选项都满意,但在我的情况下似乎都不起作用。 而且我无法找到 use_tls 为 True 或 reactor.listenSSL() 和 reactor.connectSSL() 都与 ProxyBase 一起使用的任何示例。我不确定这是否会起作用。如果我的代码有问题或者我遗漏了什么,请让我知道。虚心请求提供您的意见。

factory = protocol.ServerFactory()
#factoryClient = protocol.ClientFactory()
proxy_port = "10389"
ldap_host = "<ad-server>"
ldap_port = "636"
proxiedEndpointStr = 'tcp:host={0}:port={1}'.format(ldap_host,ldap_port)
print("Using ldaps connection: ",proxiedEndpointStr)
use_tls = True
clientConnector = partial(
    connectToLDAPEndpoint,reactor,proxiedEndpointStr,LDAPClient)

def buildProtocol():
    proto = TestProxy()
    proto.clientConnector = clientConnector
    proto.use_tls = use_tls
    return proto

factory.protocol = buildProtocol
server_key = "/mytest/tls.key"
server_crt = "/mytest/tls.crt"
reactor.listenSSL(int(proxy_port),factory,ssl.DefaultOpenSSLContextFactory(server_key,server_crt))
print(type(reactor))

# reactor.connectSSL("<ad-server>",636,factoryClient,# ssl.ClientContextFactory(),100,("localhost",10389))

reactor.run()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)