使用 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
@Musa 谢谢解答!我将为像我这样从未设置此证书的人提供更多详细信息:
- 如果您需要使用 Amazon MQ,您应该下载 mq 的根证书。eu-central-1.amazonaws.com
pem
格式(请参阅@Musa 的回答,了解如何做它)。
- 那么你应该在
.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
希望对您有所帮助。
我尝试在 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
@Musa 谢谢解答!我将为像我这样从未设置此证书的人提供更多详细信息:
- 如果您需要使用 Amazon MQ,您应该下载 mq 的根证书。eu-central-1.amazonaws.com
pem
格式(请参阅@Musa 的回答,了解如何做它)。 - 那么你应该在
.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
希望对您有所帮助。