【问题标题】:How to create ssl connection to mysql with gorm?如何使用gorm创建到mysql的ssl连接?
【发布时间】:2021-10-19 10:27:20
【问题描述】:

似乎找不到任何有关使用 gorm 创建与 mysql 的 SSL 连接的资源。我正在创建这样的非 SSL 连接:

cfg := mysql.Config{
    User:   config.User,
    Passwd: config.Password,
    Addr:   fmt.Sprintf("%s:%d", config.Host, config.Port),
    Net:    "tcp",
    Params: options,
}

str := cfg.FormatDSN()
db, err := gorm.Open("mysql", str)

在带有“pem”文件路径的参数选项中传递“ssl-ca”选项似乎不起作用。有什么注意的吗?

【问题讨论】:

  • 你能打印得到的字符串来检查它的样子吗?
  • @Ullaakut 连接字符串如下所示:root:pass@tcp(localhost:3306)/?charset=utf8&parseTime=True&allowNativePasswords=True&ssl-ca=%27ca.pem%27
  • 问题可能是你可以看到给出的路径只是ca.pem 所以它就是找不到文件。
  • @Ullaakut 我提供的路径是正确的。我只提供了 pem 文件的修剪版本的字符串。

标签: go go-gorm


【解决方案1】:

这是我的工作代码片段:

isTLS := false

if mysqlClientKey != "" && mysqlCaCert != ""  && mysqlClientCert != "" {
    isTLS = true
    rootCertPool := x509.NewCertPool()
    pem, err := ioutil.ReadFile("/path/mysqlCaCert")
    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/mysqlClientCert", "/path/mysqlClientKey")
    if err != nil {
        log.Fatal(err)
    }
    clientCert = append(clientCert, certs)
    mysql.RegisterTLSConfig("custom", &tls.Config{
        RootCAs:      rootCertPool,
        Certificates: clientCert,
    })
}

// try to connect to mysql database.
cfg := mysql.Config{
    User:   username,
    Passwd: password,
    Addr:   server, //IP:PORT
    Net:    "tcp",
    DBName: database,
    Loc: time.Local,
    AllowNativePasswords: true,
    Params: o,
}

if isTLS == true {
    cfg.TLSConfig = "custom"
}

str := cfg.FormatDSN()

db, err := gorm.Open("mysql", str)

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2022-01-12
    • 2019-05-13
    • 1970-01-01
    • 2018-08-19
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多