簡體   English   中英

Python celery 通過 ssl 連接

[英]Python celery connect through ssl

我一直在嘗試通過 celery 5.0.5 連接到 RabbitMQ(如果重要,它是從 AWS 消息服務創建的)實例。 連接鏈接開始如下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,它正在使用 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 certs 配置文件位於那里,如果您使用的是另一個發行版,請檢查 CA 證書的正確位置)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM