Go MySQL с SSL - неожиданный EOF - PullRequest
0 голосов
/ 12 марта 2019

Я использую Go MySQL драйвер как часть проекта.Недавно возникла необходимость включить SSL в базе данных MySQL, к которой я подключаюсь.У меня есть два сервера, которые настроены с TLSv1.1.На одном сервере я могу успешно подключиться, но на другом я получаю unexpected EOF из библиотеки.

Я попытался установить MaxIdleConnections в 0, как описано в Golang MySQL error - packages.go: 33: неожиданный EOF , но не повезло.До включения SSL соединения с сервером работали.Существуют и другие приложения, не написанные на Go, которые могут успешно подключаться с использованием тех же учетных данных.

Когда мое приложение запускается, команда ping немедленно завершается неудачно.Журналы сервера MySQL говорят bad handshake.Что-то не так с моим кодом подключения, приведенным ниже, или в настройке базы данных может быть отказано в соединении с skip-verify?

import (
    "database/sql"
    "io/ioutil"
    "strings"
    "text/template"

    log "github.com/sirupsen/logrus"
    // Import runtime for MySQL
    mysql "github.com/go-sql-driver/mysql"
)

type DatabaseConnection struct {
    Hostname string
    Port     int
    Database string
    Username string
    Password string
}

func CreateSSLConnection(db *DatabaseConnection) (*sql.DB, error) {
    templateString := `{{.Username}}:{{.Password}}@{{.Hostname}}:{{.Port}}/{{.Database}}?tls=skip-verify`

    conn, err := connectToDatabase("mysql", templateString, db)

    // error: "unexpected EOF"
    err = conn.Ping()
    return conn, err
}

func connectToDatabase(databaseType string, connectionTemplateString string, db *DatabaseConnection) (*sql.DB, error) {
    connectionTemplate := template.Must(template.New("connectionString").Parse(connectionTemplateString))
    builder := strings.Builder{}

    err := connectionTemplate.Execute(&builder, db)
    if err != nil {
        log.WithFields(log.Fields{
            "template": connectionTemplateString,
            "error":    err,
        }).Error("Failed to create connection string")
        return nil, err
    }

    return sql.Open(databaseType, builder.String())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...