我正在尝试使用http://www.github.com/mavricknz/ldap使用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
}
但是当我尝试通过更改将TLS应用于我的代码时
conn := ldap.NewLDAPConnection(ldapHost, ldapPort)
至
ldap.NewLDAPTLSConnection(ldapHost, ldapPort, &tls.Config{})
这给我一个错误LDAP Result Code 201 "ErrorNetwork": Invalid packet format
。该错误来自方法conn.Connect()
,当我深入研究它时,它甚至还没有达到使用TLS配置或TLS标志的程度。
好的,我找到了解决方案。我需要将端口从ldap的389更改为ldaps的636,因为我们使用TLS协议。而且我还必须使用方法NewLDAPSSLConnection
来建立隐式TLS连接。
我不确定为什么NewLDAPTSLConnection
不起作用。它使用显式TLS,这要求我们首先建立普通连接(使用端口389),然后尝试通过该连接启动TLS。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句