我正在尝试连接到 G Suite's LDAPS server与 Golang's LDAP library .
但是,在 example ,有两件事我不太明白。
看起来它首先通过非加密的 LDAP 连接?然后就升级了?这是真的吗?如果是这样,我不能从加密连接开始吗?
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)
您还可以使用DialURL
它通过模式推断 TLS 或非 TLS,例如
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 服务,因此它的信任证书应该已经在您的钥匙串(keychain)中,因此一个简单的 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}}
关于go - Golang 的 LDAP 客户端库如何使用证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61922362/