我正在尝试使用.crt文件连接到在 Azure 中托管的 mongo 数据库。
我能够使用命令从我的Linux机器终端成功连接:
mongo mongodb://username:password@prod-replicaset-0.com:27017,prod-replicaset-1.com:27017,prod-replicaset-2.com:27017/ --tls --tlsCAFile rootca.crt --tlsAllowInvalidCertificates
我还能够通过设置“使用SSL协议”并使用身份验证机制作为“SCRAM-SHA-256”从mongo UI客户端(如robo3T)进行连接。[如果我将身份验证机制设置为任何其他值,则会导致身份验证失败]
但是我无法在Go lang代码中连接到该数据库。
以下是我正在使用的代码示例:
package main
import (
"crypto/tls"
"crypto/x509"
"io/ioutil"
"log"
"net"
"github.com/globalsign/mgo"
)
func InitMongo() error {
rootCerts := x509.NewCertPool()
ca, err := ioutil.ReadFile("./rootca.crt")
if err != nil {
log.Fatalf("failed to read file : %s", err.Error())
return err
}
success := rootCerts.AppendCertsFromPEM(ca)
if !success {
log.Printf("rootcert failed")
}
connStr := "mongodb://username:password@prod-replicaset-0.com:27017,prod-replicaset-1.com:27017,prod-replicaset-2.com:27017/?ssl=true"
dbDialInfo, err := mgo.ParseURL(connStr)
if err != nil {
log.Fatal("unable to parse url - " + err.Error())
}
dbDialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
return tls.Dial("tcp", addr.String(), &tls.Config{
RootCAs: rootCerts,
InsecureSkipVerify: true,
})
}
// dbDialInfo.Mechanism = "SCRAM-SHA-256"
_session, err := mgo.DialWithInfo(dbDialInfo)
if err != nil {
log.Fatalf("failed to creating db session : %s", err.Error())
return err
}
log.Printf("Created session - %v", _session)
return nil
}
当我运行此代码时,我收到错误:无法创建数据库会话:“服务器在 SASL 身份验证步骤中返回错误:身份验证失败。
如果我在创建会话之前设置了 [数据库拨号信息机制 = “SCRAM-SHA-256”],则出现错误:无法创建数据库会话:“在构建期间未启用 SASL 支持(-标记 sasl)”
请让我知道导致此问题的原因,我如何连接到数据库。目前我正在使用“github.com/globalsign/mgo”,如果它需要使用任何其他库,那对我来说完全没问题。我只想连接到数据库。
慕盖茨4494581
相关分类