mongodb - golang 客户端无法连接到 mongo 数据库服务器 - sslv3 警报错误证书

标签 mongodb ssl go ssl-certificate

我正在尝试将 go 客户端连接到启用 ssl 运行的 mongodb 服务器。我收到一条明确的错误消息,表明握手由于 ssl 错误而失败。我在客户端使用自签名证书。

从mongodb服务器获取如下:

2017-05-13T04:38:53.910+0000 I NETWORK  [thread1] connection accepted from 172.17.0.1:51944 #10 (1 connection now open)
2017-05-13T04:38:53.911+0000 E NETWORK  [conn10] SSL: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate
2017-05-13T04:38:53.911+0000 I -        [conn10] end connection 

来自 Go 客户端的错误:

Could not connect to mongodb_s1.dev:27017 x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "XYZ")

尝试了多种选择,但没有帮助

最佳答案

您可以使用 InsecureSkipVerify = true 跳过 TLS 安全检查。这允许您使用自签名证书。请参阅 compose help 中的代码以下。

与其跳过安全检查,不如将用于签署证书的 CA 添加到系统的受信任 CA 列表中。

package main

import (
    "crypto/tls"
    "fmt"
    "net"
    "os"
    "strings"

    "gopkg.in/mgo.v2"
)

func main() {
    uri := os.Getenv("MONGODB_URL")
    if uri == "" {
        fmt.Println("No connection string provided - set MONGODB_URL")
        os.Exit(1)
    }
    uri = strings.TrimSuffix(uri, "?ssl=true")

这里:

    tlsConfig := &tls.Config{}
    tlsConfig.InsecureSkipVerify = true

    dialInfo, err := mgo.ParseURL(uri)

    if err != nil {
        fmt.Println("Failed to parse URI: ", err)
        os.Exit(1)
    }

在这里:

    dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
        conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
        return conn, err
    }

    session, err := mgo.DialWithInfo(dialInfo)
    if err != nil {
        fmt.Println("Failed to connect: ", err)
        os.Exit(1)
    }

    defer session.Close()

    dbnames, err := session.DB("").CollectionNames()
    if err != nil {
        fmt.Println("Couldn't query for collections names: ", err)
        os.Exit(1)
    }

    fmt.Println(dbnames)

}

关于mongodb - golang 客户端无法连接到 mongo 数据库服务器 - sslv3 警报错误证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43949263/

相关文章:

linux - 未授权查询 mongodb 上的 admin.system.namespaces

ssl - 确保 Kubernetes Engine 证书的兼容性

asp.net - 无法使用 Docker 在 Azure 上的 VM 上部署 ASP .net vnext 应用程序

go - 下载的 excelize xlsx 文件已损坏

Golang 事件 : EventEmitter/dispatcher for plugin architecture

go - 在生成 goroutine 的函数返回之后,发送到没有接收器的无缓冲 channel 的 goroutine 是否会永远阻塞?

javascript - 在 mongodb JavaScript 控制台中从数组批量插入

node.js - 使用 Mongoose 查找和计算集合中的元素

javascript - Mongoose/NestJs 无法访问 createdAt,即使 {timestamps : true}

java.lang.UnsatisfiedLinkError : org. mozilla.jss.ssl.SSLSocket.setSSLDefaultOption 错误