
文章插图
通常我们的数据库都配置为内网访问 , 但由于业务部署架构的不同 , 有时也需要通过公网访问 MongoDB 数据库 , 此时为了防止被端口扫描和脱库 , MongoDB 需要配置为 TLS 访问 , 那在 Go 中应该如何实现呢?
依赖
- 配置了 TLS 公网访问的 MongoDB 实例
- Go 的 MongoDB 驱动 globalsign/mgo
Go 实现代码:package modelimport ( "crypto/tls" "crypto/x509" "errors" "github.com/globalsign/mgo" "io/ioutil" "log" "net")func main() { dsn := "mongodb://user:password@host/database" dialInfo, err := mgo.ParseURL(dsn) if err != nil {log.Panic(err) } // read pemfile data pemData, err := ioutil.ReadFile("./pemfile") if err != nil {log.Panic(err) } roots := x509.NewCertPool() if !roots.AppendCertsFromPEM(pemData) {log.Panic(errors.New("failed to parse root certificate")) } // set tls config tlsConfig := &tls.Config{RootCAs: roots,InsecureSkipVerify: true, } // update dialserver with tls Dial dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {conn, err := tls.Dial("tcp", addr.String(), tlsConfig)if err != nil {log.Println(err)}return conn, err } session, err := mgo.DialWithInfo(dialInfo) if err != nil {log.Panic(err.Error()) } // db operation with session}通过以上代码 , 我们就能通过公网连接 tls 的 MongoDB 实例 , 当连接上后 , 其数据库的操作和内网连接一致 。
【如何在 Go 中使用 TLS 连接 MongoDB】
推荐阅读
-
-
秦朝|大秦赋:李斯千方百计助嫪毐,难道是真的为了嬴政吗?
-
-
李佳琦:李佳琦回应吸烟,只是个主播!而吸烟对健身又有什么影响?
-
-
宁得罪君子,不得罪小人。咋判断谁是君子,谁是小人呢
-
上观新闻|未来掌握在手中,早读|世卫组织:“百年一遇”新冠疫情仍可控
-
游侠网|僵尸数量大幅增加!《黑色行动》僵尸模式情报公布
-
-
-
交易@“碎步小阳必有大阳,碎步小阴必有大阴”,仅16字受益终身!
-
居民|土耳其哈塔伊森林大火持续,起火原因仍在调查中
-
「考试」高考就要来了,今年的分数线会比去年高还是低?四点分析可能略降
-
火锅家族|老西拿阿花做了个例子,为了讲明白一个道理
-
学霸看科技|S10+,跳水大降价却无人问津?昔日巨头即将没落?,三星Galaxy
-
-
-
-
『茵茵清观历史』怪不得不着急嫁人,贾玲隐瞒多年的身份才曝光
-