在这个例子中,我们将创建一个 Golang 客户端,通过 TLS 连接到我们的 RabbitMQ 服务器。为此,我们将不得不创建自签名的 SSL 证书,并在 Golang 应用程序和 RabbitMQ 服务器之间共享这些证书。
创建证书
在你的系统中创建以下 Dockerfile 并运行docker build --no-cache . 命令。这将在终端中输出所有需要的证书文件的内容。手动创建这些文件并暂时将其保存在某个地方。有关详细信息,请访问使用 tls-gen 的基本配置文件链接。
FROM python:3
使用 Docker 创建 RabbitMQ 服务器
创建一个专门用于 RabbitMQ 应用程序的目录,如下所示。我们已经在使用我们在上一步中创建的证书。
结构
├── cert
合成器文件
version: "3.4"
如果你启用了上面的用户和传递变量,你将不得不在 Golang 客户端的连接 URL 中使用它们。我们将在后面看到这一点。有关这些变量的更多细节,请访问在 RabbitMQ 中启用 TLS 支持页面。
建立
$ docker-compose up --build
$ docker-compose ps
验证 SSL 连接
首先要确保你的系统中至少有OpenSSL 1.1 版本。我的系统中安装了两个版本,所以我将使用最新版本的命令。
$ /usr/local/opt/openssl/bin/openssl version -a
下面我们将测试服务器与证书的连接情况。重要的部分是Verification: OK 。
$ /usr/local/opt/openssl/bin/openssl s_client -connect localhost:5671 -cert cert/server_certificate.pem -key cert/server_key.pem -CAfile cert/ca_certificate.pem
你也应该能够通过https://localhost:15671/ ,使用guest:guest 的证书访问用户界面。
注意
这只适用于MacOS。假设你的系统中有一个旧的OpenSSL版本,并通过brew install openssl 命令将其更新。如果你在运行brew link --force openssl 命令后得到Warning: Refusing to link: openssl 的错误信息,你可以运行以下命令。
# Assuming that you now have 1.1 version. Could be something else so change commands below accordingly.
Golang客户端
func Connection() (*amqp.Connection, error) {
如果你想选择性地处理证书,你可以用这个版本代替。
# Example URL set: