포트 스캔을 방지하기 위해 라이브러리 떨어져,이 시간을 일반적으로, 우리의 데이터베이스가 네트워크 액세스 용으로 구성되어 있지만, 때문에 다른 서비스 배포 아키텍처의, 때때로 공용 네트워크 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