我正在尝试使用 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。此库最近添加了该功能。
- 1 回答
- 0 关注
- 198 浏览
添加回答
举报
0/150
提交
取消