Ssl 尝试使用TLS的LDAP结果代码201“ErrorNetwork”连接到LDAP时出错:数据包格式无效

Ssl 尝试使用TLS的LDAP结果代码201“ErrorNetwork”连接到LDAP时出错:数据包格式无效,ssl,go,ldap,Ssl,Go,Ldap,我正在尝试使用LDAP和TLS创建一个身份验证服务 当我使用下面的代码仅使用基本身份验证时,一切正常 conn := ldap.NewLDAPConnection(ldapHost, ldapPort) conn.NetworkConnectTimeout = time.Duration(ldapConnTimeout) * time.Millisecond conn.ReadTimeout = time.Duration(ldapReadTimeout) * time.Millisecond

我正在尝试使用LDAP和TLS创建一个身份验证服务 当我使用下面的代码仅使用基本身份验证时,一切正常

conn := ldap.NewLDAPConnection(ldapHost, ldapPort)

conn.NetworkConnectTimeout = time.Duration(ldapConnTimeout) * time.Millisecond
conn.ReadTimeout = time.Duration(ldapReadTimeout) * time.Millisecond

if err := conn.Connect(); err != nil {
    log.Println(err)
    resp.WriteHeader(http.StatusInternalServerError)
    return
}

defer conn.Close()

// bind to ldap
if err := conn.Bind(username, password); err != nil {
    ldaperr := err.(*ldap.LDAPError)
    if ldaperr.ResultCode == ldap.LDAPResultInvalidCredentials {
        resp.Header().Set("WWW-Authenticate", `Basic realm="Item Codes Database"`)
        resp.WriteHeader(http.StatusUnauthorized)
    } else {
        log.Println(err)
        resp.WriteHeader(http.StatusInternalServerError)
    }
    return
}
但是,当我试图通过更改

conn := ldap.NewLDAPConnection(ldapHost, ldapPort)


它给我一个错误LDAP结果代码201 ErrorNetwork:无效的数据包格式。这个错误来自方法conn.Connect,当我深入研究它时,它甚至没有达到使用TLS配置或TLS标志的点。

好的,我找到了解决方案。我需要将端口从ldap的389更改为ldaps的636,因为我们使用TLS协议。我还必须使用NewLDAPSSLConnection方法来建立隐式TLS连接


我不知道为什么NewLDAPTSLConnection不起作用。它使用显式TLS,这要求我们首先建立一个正常连接,使用端口389,然后尝试通过该连接启动TLS。

我遇到了完全相同的问题。下周我将尝试使用这个库,它是mavericknz的一个更新的分支,并且有一个相当新的库,我希望它会有所帮助。如果这件事或其他事情证明是有成效的,我一定会提交答案。如果找到解决方案,我希望您也能回答自己的问题。您的LDAP服务器是否支持端口389上的STARTTLS?显然不是。这是一个变通办法,不是一个合适的解决方案。NewLDAPTLSConnection中似乎有一个bug。@EJP:我不知道OP的LDAP服务器,但我在大量支持TLS的LDAP服务器上遇到过同样的问题,这些服务器在从Perl建立连接时工作,但不使用Go库。我认为这是Go lib中的一个bug。
ldap.NewLDAPTLSConnection(ldapHost, ldapPort, &tls.Config{})