Pickle 拒绝使用 celery 报告 ContentDisallowed 序列化内容:拒绝反序列化 pickle 类型的不受信任内容

问题描述 投票:0回答:1

我试图将一些主要是 json 可序列化的 python 对象(除了 datetime.datetime )放入rabbitmq队列中,因此使用pickle进行序列化。

celery_config 文件:

CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'

它抛出一个异常:

 File "/usr/local/lib/python2.7/dist-packages/kombu/serialization.py", line 174, in loads
    raise self._for_untrusted_content(content_type, 'untrusted')
ContentDisallowed: Refusing to deserialize untrusted content of type pickle (application/x-python-serialize)

这个链接 建议我进行消息签名,但我对此一无所知。

有人可以指导我如何解决吗?

python json ssl celery pickle
1个回答
42
投票

你尝试过吗,这个:

CELERY_ACCEPT_CONTENT = ['pickle']

如本链接所示,此设置接受序列化程序名称和内容类型的列表,因此您可以将序列化程序或您希望序列化的内容类型列入白名单。

因此,要么执行上述操作,要么使用 SSL 消息签名......这基本上是构建 ssh 密钥对,并启用

celery
使用您的密钥来获得安全连接。

您可以通过以下方式注册您的“密钥”和“证书”来激活消息签名:

CELERY_SECURITY_KEY = '/etc/ssl/private/worker.key'
CELERY_SECURITY_CERTIFICATE = '/etc/ssl/certs/worker.pem'
CELERY_SECURITY_CERT_STORE = '/etc/ssl/certs/*.pem'
from celery.security import setup_security
setup_security()

至于这些东西的含义……以及它是如何工作的,请参阅: http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html

此外,有关如何生成密钥(并启用安全无密码登录),请参阅: https://help.github.com/articles/generate-ssh-keys/http://mah.everybody.org/docs/ssh 以获取其中引用的更一般链接。

© www.soinside.com 2019 - 2024. All rights reserved.