我正在尝试使用 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},
}
海绵宝宝撒
相关分类