第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Go中使用.crt文件通過 SSL連接到蒙古德

如何在Go中使用.crt文件通過 SSL連接到蒙古德

Go
飲歌長嘯 2022-10-04 16:25:02
我正在嘗試使用.crt文件連接到在 Azure 中托管的 mongo 數(shù)據(jù)庫。我能夠使用命令從我的Linux機(jī)器終端成功連接:mongo mongodb://username:password@prod-replicaset-0.com:27017,prod-replicaset-1.com:27017,prod-replicaset-2.com:27017/ --tls --tlsCAFile rootca.crt --tlsAllowInvalidCertificates我還能夠通過設(shè)置“使用SSL協(xié)議”并使用身份驗證機(jī)制作為“SCRAM-SHA-256”從mongo UI客戶端(如robo3T)進(jìn)行連接。[如果我將身份驗證機(jī)制設(shè)置為任何其他值,則會導(dǎo)致身份驗證失敗]但是我無法在Go lang代碼中連接到該數(shù)據(jù)庫。以下是我正在使用的代碼示例:package mainimport (    "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}當(dāng)我運行此代碼時,我收到錯誤:無法創(chuàng)建數(shù)據(jù)庫會話:“服務(wù)器在 SASL 身份驗證步驟中返回錯誤:身份驗證失敗。如果我在創(chuàng)建會話之前設(shè)置了 [數(shù)據(jù)庫撥號信息機(jī)制 = “SCRAM-SHA-256”],則出現(xiàn)錯誤:無法創(chuàng)建數(shù)據(jù)庫會話:“在構(gòu)建期間未啟用 SASL 支持(-標(biāo)記 sasl)”請讓我知道導(dǎo)致此問題的原因,我如何連接到數(shù)據(jù)庫。目前我正在使用“github.com/globalsign/mgo”,如果它需要使用任何其他庫,那對我來說完全沒問題。我只想連接到數(shù)據(jù)庫。
查看完整描述

1 回答

?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗 獲得超11個贊

經(jīng)過大量的研究,我無法找到一種方法來使用.crt文件連接到mongodb,使用全局簽名庫。


但是,我成功地使用mongo驅(qū)動程序庫來做到這一點。此處的連接字符串可以是格式:


mongodb://user:password@replicaset-0.com:27017,replicaset-1.com:27017,replicaset-2.com:27017/?ssl=true&tlsCAFile=./ca.crt&tlsCertificateKeyFile=./ca.pem&authSource=admin&replicaSet=replicaset

示例代碼:


import (

    "context"

    "log"

    "os"


    // "github.com/globalsign/mgo"

    mgo "go.mongodb.org/mongo-driver/mongo"


    mongoOptions "go.mongodb.org/mongo-driver/mongo/options"

)

func InitMongo() (error) {

    

    connStr := os.Getenv("MONGODB_CONN_STR")

    dbName := os.Getenv("MONGODB_DATABASE")


    clientOpts := mongoOptions.Client().ApplyURI(connStr)

    if err := clientOpts.Validate(); err != nil {

        log.Print("unable to parse url")

        log.Fatal(err)

    }

    client, err := mgo.Connect(context.TODO(), clientOpts)

    if err != nil {

        log.Print("unable to connect into database")

        log.Fatal(err)

    }

    if err := client.Ping(context.TODO(), nil); err != nil {

        log.Print("database ping failed")

        log.Fatal(err)

    }


    //client.Database(dbName)


    return nil

}


查看完整回答
反對 回復(fù) 2022-10-04
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號