
文章插图
通常我们的数据库都配置为内网访问 , 但由于业务部署架构的不同 , 有时也需要通过公网访问 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】
推荐阅读
-
华为Mate30@华为P40系列4199起售,三款机型国内正式发布
-
-
小书虫妈妈|这四种“营养水”,宝宝爱喝也不能给,婴幼儿喝水大有学问
-
小美人鱼|《小美人鱼》预告公布,直接被骂惨,这确实就是「黑」美人鱼
-
-
-
等边三角形边长公式是什么?等边三角形边长公式是什么?
-
【陈晨晨|宝马X7起价百万而BEIJING-X7预售10-15万元便宜吗?】
-
横眉冷对千夫指俯首甘为孺子牛是什么意思? 横眉冷对千夫指 俯首甘为孺子牛是什么意思
-
-
-
-
-
金羊网|仝卓发文手撕郑云龙,网友:“难道是郑云龙逼你高考舞弊的?
-
正宗欧式软面包的做法窍门,自制老式面包的做法窍门-
-
微笑的背后隐藏了多少无言的忧伤?微笑的背后下一句是什么
-
-
-
驱动之家■8 系列发布会:准备了 N 个月 无比精彩,刘作虎剧透一加
-
南国早报|“是通知你们,不是和你们商量”充电区迁移,南宁一小区现强硬通知!物管回应