이동에서 TLS 연결하여 MongoDB를 사용하는 방법

포트 스캔을 방지하기 위해 라이브러리 떨어져,이 시간을 일반적으로, 우리의 데이터베이스가 네트워크 액세스 용으로 구성되어 있지만, 때문에 다른 서비스 배포 아키텍처의, 때때로 공용 네트워크 MongoDB의 데이터베이스를 통해 액세스 할 수 있어야합니다, 당신은 TLS에 MongoDB를 액세스를 구성 할 필요가 이동하는 어떻게 그것을 달성해야합니까?

의지

MongoDB의 인스턴스가 TLS 공용 네트워크 액세스가 배열
하여 MongoDB로 이동 드라이브 globalsign / 산화 마그네슘

구현 코드를 이동

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

추천

출처blog.51cto.com/51reboot/2408660