Golang的LDAP客户端库如何处理证书?



我正在尝试使用Golang的LDAP库连接到G Suite的LDAPS服务器。

但是,在示例中,我不太了解两件事。

  1. 似乎它首先通过未加密的LDAP连接?然后它升级了?这是真的吗,如果是这样,我不能从加密连接开始吗?

  2. Google提供了一个.cer和.key文件来连接到他们的ldap服务器。我没有看到它在哪里使用这些文件。我确实在他们的文档中看到许多LDAP客户端要求将文件合并为.p12。这对于 Go 来说有必要吗?

如果回答这个问题的人可以提供一个例子,那将非常有帮助。谢谢。

StartTLS,如您所指出的,允许在连接生命周期的稍后阶段升级连接以使用TLS

如果要立即通过TLS进行连接,请使用众所周知的ldaps端口636(而不是389( - 并使用DialTLS:

// l, err := ldap.Dial("tcp", "ldap.example.com:389"))
var tlsConf *tls.Config
ldaps, err := ldap.DialTLS("tcp", "gsuite.google.com:636", tlsConf)

您也可以使用通过架构推断 TLS 或非 TLS 的DialURL,例如

conn, err := ldap.DialURL("ldap://ldap.example.com") // non-TLS on default port 389
conn, err := ldap.DialURL("ldaps://ldap.example.com") // TLS on default port 636
conn, err := ldap.DialURL("ldaps://myserver.com:1234") // TLS on custom port 1234
// Note: there is no way to add a custom tls.Config with this method

因此,如果使用,DialTLS:由于您使用的是Google服务,因此它的信任证书应该已经在您的钥匙串中,因此一个简单的tls.Config就足够了:

tlsConf = &tls.Config{ServerName:"gsuite.google.com"} // <- ensure this matches the hostname provided by the server

如果你想让事情开始运行进行测试:

// DONT EVER USE THIS IN PRODUCTION...
tlsConf = &tls.Config{InsecureSkipVerify: true} // DO NOT USE EVER

要为客户端身份验证添加客户端证书,请执行以下操作:

// Load cer & key files into a pair of []byte 
cert, err := tls.X509KeyPair(cer, key)
if err != nil {
log.Fatal(err)
}
tlsCong := &tls.Config{Certificates: []tls.Certificate{cert}}

最新更新