频道栏目
首页 > 网络 > 其他 > 正文

如何在 Go 中使用 TLS 连接 MongoDB-Python & Golang 学习-51CTO博客

2019-06-13 19:34:20           
收藏   我要投稿

通常我们的数据库都配置为内网访问,但由于业务部署架构的不同,有时也需要通过公网访问 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 实例,当连接上后,其数据库的操作和内网连接一致。http://www.songjiayang.com/posts/mongo-connect-with-tls-in-go

今晚八点 go分享 直播链接:https://ke.qq.com/course/134017 51Reboot golang课程 6.15开班

有想要咨询的WeChat:17812796384

上一篇:【运维】从实战掌握自动化运维工具Ansible-阿里云大学的博客-51CTO博客
下一篇:VMware Workstation12安装win 7企业版激活-蓝胖纸学IE-51CTO博客
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站