go-sql-driver/mysql · error
invalid value / unknown server pub key name: %s
Error message
invalid value / unknown server pub key name: %s
What it means
Error "invalid value / unknown server pub key name: %s" thrown in go-sql-driver/mysql.
Source
Thrown at dsn.go:225
default:
cfg.TLS = getTLSConfigClone(cfg.TLSConfig)
if cfg.TLS == nil {
return errors.New("invalid value / unknown config name: " + cfg.TLSConfig)
}
}
}
if cfg.TLS != nil && cfg.TLS.ServerName == "" && !cfg.TLS.InsecureSkipVerify {
host, _, err := net.SplitHostPort(cfg.Addr)
if err == nil {
cfg.TLS.ServerName = host
}
}
if cfg.ServerPubKey != "" {
cfg.pubKey = getServerPubKey(cfg.ServerPubKey)
if cfg.pubKey == nil {
return errors.New("invalid value / unknown server pub key name: " + cfg.ServerPubKey)
}
}
if cfg.Logger == nil {
cfg.Logger = defaultLogger
}
return nil
}
func writeDSNParam(buf *bytes.Buffer, hasParam *bool, name, value string) {
buf.Grow(1 + len(name) + 1 + len(value))
if !*hasParam {
*hasParam = true
buf.WriteByte('?')
} else {
buf.WriteByte('&')
}View on GitHub (pinned to 03d76c7e07)
Solutions
- Register the server public key with mysql.RegisterServerPubKey(name, key) before using serverPubKey=<name> in the DSN.
- Check the name for typos; the registered key name must match the DSN value exactly.
Example fix
key, _ := os.ReadFile("server_pub_key.pem")
mysql.RegisterServerPubKey("mykey", key)
dsn := "user:pass@tcp(dbhost:3306)/mydb?serverPubKey=mykey" When it happens
Trigger: The DSN sets serverPubKey=<name> but no public key with that name was registered via mysql.RegisterServerPubKey.
Common situations: Used with caching_sha2_password authentication over an insecure channel where the server's RSA public key is needed. Call mysql.RegisterServerPubKey with the key before connecting, enable TLS, or set allowFallbackToPlaintext where acceptable.
AI-assisted analysis of go-sql-driver/mysql@03d76c7e07 (2026-08-07).
Data as JSON: /api/errors/3232c90c89354a6d.
Report an issue: GitHub.