我一直在尝试通过 celery 5.0.5 连接到 RabbitMQ(如果重要的话,它是从 AWS Messaging Service 创建的)实例。连接链接开始如下
amqps://user:password@..../
。运行 python 脚本时收到以下错误:
consumer: Cannot connect to amqps://sessionstackadmin:**@b-0482d011-0cca-40bd-968e-c19d6c85e2a9.mq.eu-central-1.amazonaws.com:5671//: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
我正在使用
python 3.6.12
从 docker 容器运行脚本。 docker 容器可以访问端点(至少可以远程登录到它)。我感觉 python 进程不尊重发行版证书链,它只是无法验证证书。
我解决了! Celery 使用的是 Kombu,Kombu 使用的是 py-amqp,并且碰巧 1 月 19 日的最新版本 5.0.3 已损坏。
我的 GH 票https://github.com/celery/py-amqp/issues/349
解决方案:将amqp==5.0.2
添加为项目需求中的硬依赖项。修复于:
git+git://github.com/celery/py-amqp.git@0b8a832d32179d33152d886acd6f081f25ea4bf2
kombu
库在尝试处理 ssl 连接时不尊重您的发行版附带的默认 CA 证书。这基本上是由https://docs.python.org/3/library/ssl.html#ssl.create_default_context 处理的,该库不使用该库。遗憾的是,它不允许传递自定义的
SSLContext
,而只允许传递一组稍后传递到上下文的选项。其中一个选项是broker_use_ssl。通过将其设置为
{'ca_certs': '/etc/ssl/certs/ca-certificates.crt'}
,它将尊重发行版中的 CA 证书(请记住,我使用的是基于 ubuntu/debian 的映像,并且 CA 证书配置文件驻留在此处,如果您使用的是其他发行版,请检查正确的位置用于您的 CA 证书)。
Field 'size' is currently not supported, full error: {'ok': 0.0, 'code': 303, 'errmsg': "Field 'size' is currently not supported", 'operationTime': Timestamp(1702028758, 1)}