使用 Symfony Messenger 连接到 AmazonMQ 失败

Fail connect to AmazonMQ using Symfony messenger

我尝试在 AmazonMQ 中使用 amqps 协议连接到 AmazonMQ 并收到此错误:

NOTICE: PHP message: [error] Symfony\Component\Messenger\Exception\InvalidArgumentException
cfi-lms-api_1              | No CA certificate has been provided. Set "amqp.cacert" in your php.ini or pass the "cacert" parameter in the DSN to use SSL. Alternatively, you can use amqp:// to use without SSL.

我在哪里可以获得此证书以及如何正确使用 amqps 以防 AmazonMQ?我应该为 cacert 指定什么路径?

我尝试使用 amqp 协议,但 Amazon MQ 不支持它。

在文档中:

If you want to use TLS/SSL encrypted AMQP, you must also provide a CA certificate. Define the certificate path in the amqp.cacert PHP.ini setting (e.g. amqp.cacert = /etc/ssl/certs) or in the cacert parameter of the DSN (e.g amqps://localhost?cacert=/etc/ssl/certs/).

(在 https://symfony.com/doc/current/messenger.html

它说 cacert 是“PEM 格式的 CA 证书文件的路径”。

您可以通过 Web 浏览器下载文件,单击 url 栏中“https”旁边的“储物柜”图标。例如,Whosebug 的 ca 证书可以这样下载:

首选“root”选项卡中的那个,它通常有效时间更长(+ 10 年)。

来源:

https://github.com/symfony/amqp-messenger/blob/5.4/Transport/Connection.php#L232

https://github.com/symfony/amqp-messenger/blob/4175a0a98507e7ec575dca9b36e6c0a5a072d3fd/Transport/Connection.php#L285

@Musa 谢谢解答!我将为像我这样从未设置此证书的人提供更多详细信息:

  1. 如果您需要使用 Amazon MQ,您应该下载 mq 的根证书。eu-central-1.amazonaws.com pem 格式(请参阅@Musa 的回答,了解如何做它)。
  2. 那么你应该在 .env 文件中更改 MESSENGER_TRANSPORT_DSN 以添加新参数 cacert(有关更多详细信息,请参阅 Symfony 文档 https://symfony.com/doc/current/messenger.html#amqp-transport):
MESSENGER_TRANSPORT_DSN=amqps://username:password@your-secure-url.mq.eu-central-1.amazonaws.com:5671/%2f/_messages?cacert=/path-to-root-cert/mq-eu-central-1-amazonaws-com.pem

另一种可能的解决方案是指定 Amazon Root CA 1。每个 Linux 发行版都有此证书(请参阅包 ca-certificates)。在这种情况下,MESSENGER_TRANSPORT_DSN 必须是这样的:

MESSENGER_TRANSPORT_DSN=amqps://username:password@your-secure-url.mq.eu-central-1.amazonaws.com:5671/%2f/_messages?cacert=/etc/ssl/certs/Amazon_Root_CA_1.pem

对于 AmazonMQ/rabbitmq

的新闻新手

从此 url 获取 PEM:https://www.amazontrust.com/repository/AmazonRootCA1.pem

并传递 = ?cacert=/path/to/pem/Amazon_Root_CA_1.pem

希望对您有所帮助。