美文网首页
如何在 Go 中使用 TLS 连接 MongoDB

如何在 Go 中使用 TLS 连接 MongoDB

作者: 51reboot | 来源:发表于2019-11-25 17:17 被阅读0次

通常我们的数据库都配置为内网访问,但由于业务部署架构的不同,有时也需要通过公网访问 MongoDB 数据库,此时为了防止被端口扫描和脱库,MongoDB 需要配置为 TLS 访问,那在 Go 中应该如何实现呢?

依赖

  • 配置了 TLS 公网访问的 MongoDB 实例
  • Go 的 MongoDB 驱动 globalsign/mgo

Go 实现代码:

package model

import (
    "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 实例,当连接上后,其数据库的操作和内网连接一致。

作者:宋佳洋
转载请获得作者同意

Golang 微信技术交流群,某些特定的资料找WeChat:17812796384

相关文章

  • 如何在 Go 中使用 TLS 连接 MongoDB

    通常我们的数据库都配置为内网访问,但由于业务部署架构的不同,有时也需要通过公网访问 MongoDB 数据库,此时为...

  • 如何在 Go 中使用 TLS 连接 MongoDB

    通常我们的数据库都配置为内网访问,但由于业务部署架构的不同,有时也需要通过公网访问 MongoDB 数据库,此时为...

  • go 操作 mongodb

    MongoDB Go驱动程序 MongoDB Go Driver使用帮助文档 安装使用: 安装直接 go mod ...

  • mongodb连接

    此处使用MongoDB shell 来连接 Mongodb 服务 标准 URI 连接语法:(中括号里的内容为可选,...

  • MongoDB实例在多进程中使用

    个人在使用MongoDB连接时,会使用单例模式,只创建一个MongoDB连接对象。在pymongo中,MongoD...

  • 使用Go实现TLS 服务器和客户端

    使用Go实现TLS 服务器和客户端传输层安全协议(Transport Layer Security,缩写:TLS)...

  • cocos creator中javaScript使用WebSoc

    本文中使用WebSocket与服务器长连接,通信采用的是protobuf:如何在javascript环境下使用go...

  • go中使用SSH认证连接MongoDB

    一、说明 go连接MongoDB驱动库mongo-driver和mgo.v2库中都不支持ssh认证连接的。但是我们...

  • C#使用SSH认证连接MongoDB

    一、环境 在C#中可以使用Renci.SshNet和MongoDB.Driver通过SSH认证连接MongoDB数...

  • TLS 1.2

    一觉醒来, 漫山遍野的: 用于加载此网站的连接使用的是 TLS 1.0 或 TLS 1.1, 这两个TLS 版本都...

网友评论

      本文标题:如何在 Go 中使用 TLS 连接 MongoDB

      本文链接:https://www.haomeiwen.com/subject/wfujwctx.html