You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何使用.crt证书通过SSL连接Azure上的MongoDB数据库

问题原因
  • 你使用的github.com/globalsign/mgo驱动属于旧版mgo的第三方分支,已停止维护,其对SCRAM-SHA-256认证机制的支持依赖SASL扩展,默认编译未开启该特性,因此指定Mechanism = "SCRAM-SHA-256"时会抛出SASL未启用的错误。
  • 未指定认证机制时,驱动默认使用老旧的SCRAM-SHA-1或MONGODB-CR认证方式,与你Azure MongoDB实例要求的SCRAM-SHA-256不匹配,直接返回认证失败。
  • 额外注意:你当前的连接串未指定authSource参数,Azure托管MongoDB默认的认证源为admin库,缺失该参数也可能导致认证失败。
解决方案

推荐方案:更换为MongoDB官方Go驱动

官方驱动原生支持SCRAM-SHA-256,无需额外编译标签,维护迭代更稳定,适配所有新版MongoDB特性。
示例代码如下:

package main

import (
	"context"
	"crypto/tls"
	"crypto/x509"
	"io/ioutil"
	"log"
	"time"

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

func InitMongo() error {
	// 加载CA证书
	rootCerts := x509.NewCertPool()
	ca, err := ioutil.ReadFile("./rootca.crt")
	if err != nil {
		log.Fatalf("读取CA证书失败: %s", err.Error())
		return err
	}
	success := rootCerts.AppendCertsFromPEM(ca)
	if !success {
		log.Fatal("解析CA证书失败")
	}

	// 配置TLS
	tlsConfig := &tls.Config{
		RootCAs:            rootCerts,
		InsecureSkipVerify: true, // 对应连接参数--tlsAllowInvalidCertificates
	}

	// 构造连接串,新增authSource=admin指定认证源
	connStr := "mongodb://username:password@prod-replicaset-0.com:27017,prod-replicaset-1.com:27017,prod-replicaset-2.com:27017/?authSource=admin&ssl=true"

	// 配置客户端参数
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	client, err := mongo.Connect(ctx, options.Client().
		ApplyURI(connStr).
		SetTLSConfig(tlsConfig),
	)
	if err != nil {
		log.Fatalf("创建数据库会话失败: %s", err.Error())
		return err
	}

	// 测试连接连通性
	if err := client.Ping(ctx, nil); err != nil {
		log.Fatalf("连接数据库失败: %s", err.Error())
		return err
	}

	log.Printf("连接成功,客户端实例:%v", client)
	return nil
}

执行时直接正常编译运行即可,无需额外标签。

临时方案:继续使用现有globalsign/mgo驱动

如果暂时无法更换驱动,可在编译/运行时添加sasl标签开启SASL支持:

  • 运行时:go run -tags sasl main.go
  • 构建时:go build -tags sasl

同时需要做两处代码修改:

  1. 取消代码中dbDialInfo.Mechanism = "SCRAM-SHA-256"的注释
  2. 在连接串中新增authSource=admin参数,修改后连接串为:
    mongodb://username:password@prod-replicaset-0.com:27017,prod-replicaset-1.com:27017,prod-replicaset-2.com:27017/?ssl=true&authSource=admin

内容的提问来源于stack exchange,提问作者KIRAN KUMAR B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:57:01