go - Golang 的 LDAP 客户端库如何使用证书?

标签 go ldap google-workspace

我正在尝试连接到 G Suite's LDAPS serverGolang's LDAP library .

但是,在 example ,有两件事我不太明白。

  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)

您还可以使用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/

相关文章:

c - 如何将 char * 更改为等效的 Go

powershell - 在具有多个受信任的林和域的网络中为数百万 AD 组获取 AD 成员资格的更快方法

java - 从用户的多个 OU 递归查询 LDAP 角色

python - 为什么 Django 根据谷歌是一个 'less secure' 应用程序?

email - MailApp.sendEmail 所有邮件被阻止

go - 覆盖 printf 方法

json - 为从 JSON 读取的数据分配适当的类型

oop - 如何在 Go 中实现一个抽象类?

java - 如何将自定义权限填充器与 Spring Security 和 ActiveDirectoryLdapAuthenticationProvider 一起使用?

oauth-2.0 - Google SAML app_not_configured_for_user/相当于 prompt=select_account SAML