在 Go 中使用 SASL 外部使用 qpid-质子客户端库连接到 AMQP 1.0 兔子 MQ

我正在尝试使用 https://github.com/apache/qpid-proton 提供的golang实现,通过SASL EXTERNAL机制通过自签名证书提供的身份验证与RabbitMQ建立TLS连接。目标是能够在不指定 URI 中的用户名和密码的情况下连接到 RabbitMQ。


兔子 MQ 使用以下配置运行:


      auth_mechanisms.1 = EXTERNAL

      auth_mechanisms.2 = PLAIN

      auth_mechanisms.3 = AMQPLAIN

和插件:


rabbitmq_amqp1_0

rabbitmq_auth_mechanism_ssl

我已经确认我能够使用节点.js库(https://github.com/amqp/rhea)与 SASL 外部连接,并且我已经确认使用普通和匿名连接在 qpid-质子库中可以使用 Go,但无法使用 Go 与 SASL 外部连接。


我的客户端代码没有返回任何错误,但 RabbitMQ 错误日志告诉我客户端关闭了 TCP 连接


2021-06-24 18:57:22.029 [info] <0.16358.106> accepting AMQP connection <0.16358.106> (127.0.0.1:50610 -> 127.0.0.1:5671)

2021-06-24 18:57:23.030 [warning] <0.16358.106> closing AMQP connection <0.16358.106> (127.0.0.1:50610 -> 127.0.0.1:5671):

client unexpectedly closed TCP connection

我的客户端代码如下:


package main


import (

        "fmt"

        "github.com/apache/qpid-proton/go/pkg/amqp"

        "github.com/apache/qpid-proton/go/pkg/electron"

        "os"

        "crypto/tls"

        "io/ioutil"

        "crypto/x509"

        "time"

)


func main() {

        keyPair, err := tls.LoadX509KeyPair("client.crt", "client.key")


        if err != nil {

                fmt.Println("Failed to load certificate:", err)

                os.Exit(1)

        }


        rootCa, err := ioutil.ReadFile("rootCA.crt")

        if err != nil {

                fmt.Println("Failed to read root CA:", err)

                os.Exit(1)

        }

        certPool := x509.NewCertPool()

        certPool.AppendCertsFromPEM(rootCa)


        tlsConfig := &tls.Config{

                RootCAs: certPool,

                InsecureSkipVerify: true,

                Certificates: []tls.Certificate{keyPair},

        }

吃鸡游戏
浏览 199回答 1
1回答

海绵宝宝撒

这不是使用qpid-质子客户端库的解决方案,但我最终使用&nbsp;https://github.com/Azure/go-amqp&nbsp;通过SASL外部连接到兔子MQ。此库最近添加了该功能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go