Go 戈朗';s的LDAP客户端库是否使用证书?

Go 戈朗';s的LDAP客户端库是否使用证书?,go,ldap,google-workspace,Go,Ldap,Google Workspace,我正试着和你联系 然而,在现实生活中,我并不真正理解两件事 它似乎首先通过非加密LDAP连接?然后升级?这是真的吗?如果是这样,我就不能从加密连接开始吗 Google提供了一个.cer和.key文件来连接到他们的ldap服务器。我看不出它在哪里使用这些文件。我确实在他们的文档中看到,许多LDAP客户端要求将文件合并到.p12中。这对围棋有必要吗 如果回答这个问题的人能提供一个例子,那将非常有帮助。谢谢。StartTLS,如您所述,允许您在连接生命周期的稍后阶段升级连接以使用TLS 如果要立即通过

我正试着和你联系

然而,在现实生活中,我并不真正理解两件事

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

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


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

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

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

    // 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
    :因为您使用的是谷歌服务,它的信任证书应该已经在您的钥匙链中,所以一个简单的
    tls.Config
    就足够了:

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

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

    // 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}}
    

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

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

    // 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
    :因为您使用的是谷歌服务,它的信任证书应该已经在您的钥匙链中,所以一个简单的
    tls.Config
    就足够了:

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

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

    // 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}}
    

    非常感谢。但是对于.cer和.key证书文件,tlsConfig会是什么样子呢?更新了带有客户端证书身份验证信息的答案。谢谢!我可以稍后测试并接受答案。谢谢。但是对于.cer和.key证书文件,tlsConfig会是什么样子呢?更新了带有客户端证书身份验证信息的答案。谢谢!我应该可以稍后测试并接受答案。