为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
吃鸡游戏 2022-09-12 16:10:16
我正在尝试使用 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_0rabbitmq_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 mainimport (        "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},        }
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这不是使用qpid-质子客户端库的解决方案,但我最终使用 https://github.com/Azure/go-amqp 通过SASL外部连接到兔子MQ。此库最近添加了该功能。


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信