2017-05-13 9 views
0

sslを有効にして実行しているmongodbサーバーにgoクライアントを接続しようとしています。 sslエラーのために手ぶれが失敗したことを示す明確なエラーメッセージが表示されます。私はクライアント側で自己署名証明書を使用します。golangクライアントがmongo dbサーバーに接続できません - sslv3アラートの不正な証明書

は、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 

エラー:

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") 

は、複数のオプションを試してみましたが、あなたが使用してTLSのセキュリティチェックをスキップすることができ

+0

あなたはいくつかのコードを追加することができますしてください? – papey

答えて

1

を助けていないがInsecureSkipVerify = true。これにより、自己署名証明書を使用することができます。以下の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) 

} 
関連する問題