mirror of https://github.com/pressly/goose.git
tls support on mysql by using CA's pem
parent
940412f732
commit
cf288525b2
|
@ -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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue