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

  1. Register the server public key with mysql.RegisterServerPubKey(name, key) before using serverPubKey=<name> in the DSN.
  2. 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.