2017-02-10 16 views
1

我有一個在AWS上運行的RDS實例,我想知道如何通過ssl連接到該實例。如何在帶有mysql rds實例的aws上使用帶有ssl的go-mysql-driver

從此鏈接Using SSL with mysql database。 AWS建立我們的數據庫,並註冊一個證書並提供根證書供下載。 AWS rds root ca

現在,go-mysql-driver在那裏提供了這個信息,用來設置一個ssl連接。

rootCertPool := x509.NewCertPool() 
pem, err := ioutil.ReadFile("/path/ca-cert.pem") 
if err != nil { 
    log.Fatal(err) 
} 
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { 
    log.Fatal("Failed to append PEM.") 
} 
clientCert := make([]tls.Certificate, 0, 1) 
certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client- key.pem") 
if err != nil { 
    log.Fatal(err) 
} 
clientCert = append(clientCert, certs) 
mysql.RegisterTLSConfig("custom", &tls.Config{ 
         RootCAs: rootCertPool, 
         Certificates: clientCert, 
         }) 
db, err := sql.Open("mysql", "[email protected](localhost:3306)/test?tls=custom") 

該示例表明我需要客戶端證書和客戶端密鑰。

但亞馬遜只提供根證書。我如何使用go-mysql-driver連接到我的mysql實例?

回答

1

從看文檔hereherehere,它看起來像你只需將RootCAs值設置爲您從AWS獲得的根證書。由於您未使用客戶端證書,因此您無需設置Certificates值。所以代碼看起來像這樣:

rootCertPool := x509.NewCertPool() 
pem, err := ioutil.ReadFile("/path/ca-cert.pem") 
if err != nil { 
    log.Fatal(err) 
} 
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { 
    log.Fatal("Failed to append PEM.") 
} 
mysql.RegisterTLSConfig("custom", &tls.Config{ 
         RootCAs: rootCertPool, 
         }) 
db, err := sql.Open("mysql", "[email protected](localhost:3306)/test?tls=custom") 
+0

這似乎工作,但是當我對我的MySQL數據庫運行查詢。我收到以下錯誤。 [mysql] 2017/02/11 14:23:14 packets.go:33:意外的EOF [mysql] 2017/02/11 14:23:15 packets.go:33:意外的EOF [mysql] 2017/02/11 14:23:15 statement.go:27:無效的連接所以看起來連接並不實際工作。任何其他想法如何讓這個工作? –