diff --git a/main.go b/main.go index 4f91e21..60fc6ed 100644 --- a/main.go +++ b/main.go @@ -133,6 +133,7 @@ func main() { cli.IntFlag{"q", 0, "QoS", ""}, cli.StringFlag{"cafile", "", "CA certificates", ""}, cli.StringFlag{"cert", "", "Client certificates", ""}, + cli.StringFlag{"key", "", "Client private key", ""}, cli.StringFlag{"i", "", "ClientiId. Defaults random.", ""}, cli.StringFlag{"m", "test message", "Message body", ""}, cli.BoolFlag{"r", "message should be retained.", ""}, diff --git a/mqtt.go b/mqtt.go index 772081b..8b9b436 100644 --- a/mqtt.go +++ b/mqtt.go @@ -137,6 +137,18 @@ func NewOption(c *cli.Context) (*MQTT.ClientOptions, error) { TLSConfig.ClientAuth = tls.RequireAndVerifyClientCert TLSConfig.ClientCAs = certPool } + key := c.String("key") + if key != "" { + scheme = "ssl" + if cert == "" { + return nil, fmt.Errorf("key specified but cert is not specified") + } + cert, err := tls.LoadX509KeyPair(cert, key) + if err != nil { + return nil, err + } + TLSConfig.Certificates = []tls.Certificate{cert} + } insecure := c.Bool("insecure") if insecure { TLSConfig.InsecureSkipVerify = true