
文章插图
通常我们的数据库都配置为内网访问 , 但由于业务部署架构的不同 , 有时也需要通过公网访问 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】
推荐阅读
-
-
明清时期顺天府尹究竟是多大的官 顺天是现在的哪个城市
-
巴西总统第二次检测结果仍为阳性|确诊一周后巴西总统第二次检测结果仍为阳性
-
-
-
复工进行时,细数pick快会matein的几种理由
-
瞭望|中国农业持续丰产丰收背后:洋种子成农业“芯片”存隐忧
-
爆笑街|开心一笑:有人逗她说:你这小别胜新婚呀!怎么说那么久?
-
「中新网」冬季风暴袭击美国东部 数百万人面临极端天气威胁
-
游戏时光VGtime|8年过去了,《星际公民》的单人战役还没个准信
-
-
-
神说要唱歌|王宫骑士团登场 优衣这次真的对不起了,公主连结第13话预告图详解
-
基金|腾讯又出手!连续两日举牌,这次是A股游戏龙头,私募大佬冯柳前脚刚重仓进驻…
-
-
创新工场|创新工场提出中文分词和词性标注新模型 可提升工业应用效率
-
-
韩镕泽|鲁能这一数据领跑中超太意外!仅恒大、苏宁可媲美,韩镕泽是功臣
-
车家号|产能或将暴涨,特斯拉将采用八台铸造机替代机器人
-
全新国产奥迪A3L预售 21万起!空间大增 内饰彻底大变