tls support on mysql by using CA's pem

pull/180/head
Songmu 2019-06-20 15:14:29 +09:00
parent 940412f732
commit cf288525b2
3 changed files with 31 additions and 2 deletions

View File

@ -3,11 +3,13 @@
package main package main
import ( import (
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"log" "log"
"github.com/go-sql-driver/mysql" "github.com/go-sql-driver/mysql"
_ "github.com/go-sql-driver/mysql"
_ "github.com/ziutek/mymysql/godrv" _ "github.com/ziutek/mymysql/godrv"
) )
@ -34,3 +36,19 @@ func normalizeMySQLDSN(dsn string) (string, error) {
config.ParseTime = true config.ParseTime = true
return config.FormatDSN(), nil return config.FormatDSN(), nil
} }
const tlsConfigKey = "custom"
func registerTLSConfig(pemfile string) error {
rootCertPool := x509.NewCertPool()
pem, err := ioutil.ReadFile(pemfile)
if err != nil {
return err
}
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
return fmt.Errorf("failed to append PEM: %q", pemfile)
}
return mysql.RegisterTLSConfig(tlsConfigKey, &tls.Config{
RootCAs: rootCertPool,
})
}

View File

@ -10,3 +10,7 @@ import (
func normalizeDBString(driver string, str string) string { func normalizeDBString(driver string, str string) string {
return str return str
} }
func registerTLSConfig(_ string) error {
return nil
}

View File

@ -15,6 +15,7 @@ var (
verbose = flags.Bool("v", false, "enable verbose mode") verbose = flags.Bool("v", false, "enable verbose mode")
help = flags.Bool("h", false, "print help") help = flags.Bool("h", false, "print help")
version = flags.Bool("version", false, "print version") version = flags.Bool("version", false, "print version")
sslCA = flags.String("ssl-ca", "", "file path to root CA's certificates in pem format (only support on mysql)")
) )
func main() { func main() {
@ -35,6 +36,12 @@ func main() {
return return
} }
if *sslCA != "" {
if err := registerTLSConfig(*sslCA); err != nil {
log.Fatalf("goose run: %v", err)
}
}
switch args[0] { switch args[0] {
case "create": case "create":
if err := goose.Run("create", nil, *dir, args[1:]...); err != nil { if err := goose.Run("create", nil, *dir, args[1:]...); err != nil {